在 Kubernetes 中访问 Nextcloud 时出错
Error when access to Nextcloud in Kubernetes
我的目标是:
- 使用 Nextcloud 创建一个 pod
- 创建一个服务来访问这个 pod
- 从另一台装有 nginx 的机器将 CNAME 路由到服务
我尝试用 Nextcloud 部署一个 pod 和一个访问它的服务,但实际上我无法访问它。我有一个错误:
message ERR_SSL_PROTOCOL_ERROR.
一开始我只是跟着一个tutorial但是我不想像解释的那样使用nginx因为我在另一台机器上有它
当我查看 pods (nextcloud + db) 和服务时,它们看起来不错,但当我尝试访问 nextcloud 时没有任何响应。
(nc = nextcloud)
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nc
name: nc
spec:
replicas: 1
selector:
matchLabels:
app: nc
strategy:
type: Recreate
template:
metadata:
labels:
app: nc
spec:
containers:
- env:
- name: DEBUG
value: "false"
- name: NEXTCLOUD_URL
value: http://test.fr
- name: NEXTCLOUD_ADMIN_USER
value: admin
- name: NEXTCLOUD_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: nextcloud
key: NEXTCLOUD_ADMIN_PASSWORD
- name: NEXTCLOUD_UPLOAD_MAX_FILESIZE
value: 4G
- name: NEXTCLOUD_MAX_FILE_UPLOADS
value: "20"
- name: MYSQL_DATABASE
value: nextcloud
- name: MYSQL_HOST
value: mariadb
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb
key: MYSQL_ROOT_PASSWORD
- name: MYSQL_USER
value: nextcloud
name: nc
image: nextcloud
ports:
- containerPort: 80
protocol: TCP
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/www/html
name: vnextcloud
subPath: html
- mountPath: /var/www/html/custom_apps
name: vnextcloud
subPath: apps
- mountPath: /var/www/html/config
name: vnextcloud
subPath: config
- mountPath: /var/www/html/data
name: vimages
subPath: imgnc
- mountPath: /var/www/html/themes
name: vnextcloud
subPath: themes
restartPolicy: Always
volumes:
- name: vnextcloud
persistentVolumeClaim:
claimName: nfs-pvcnextcloud
- name: vimages
persistentVolumeClaim:
claimName: nfs-pvcimages
为了创建服务,我使用了这个命令行:
kubectl expose deployment nc --type=NodePort --name=svc-nc --port 80
为了访问我的 nextcloud,我尝试了地址 @IP_MASTER:32500
我的问题是:
- 如何检查 pod 是否正常工作?
知道问题是来自服务还是 pod
- 我应该怎么做才能访问我的 nextcloud?
我没有做 tuto 部分 "Create self-signed certificates" 因为我不知道如何管理。它应该在我的其他 Linux 机器上还是在我的 Kubernetes 集群中
1.请考虑使用稳定版nextcloud helm chart
2.这个教程有点过时了,也可以找到here
在 kubernetes 1.16 版本中,您应该将所有部署的 apiVersion 更改为 apiVersion: apps/v1
请查看 Deprecations and Removals。
此外,您应该会收到错误 ValidationError(Deployment.spec): missing required field "selector"
,因此请在 Deployment.spec
下的部署中添加选择器,例如:
selector:
matchLabels:
app: db
3. 最后创建自签名证书。这个 repo 使用 OMGWTFSSL - Self Signed SSL Certificate Generator。一旦您提供了必要的信息,如服务器名称、本地路径 hostpath
和 SSL 证书的名称,它将在指定的 hostpath
:[=31= 下的一个 pod-运行 后自动创建]
volumes:
- name: certs
hostPath:
path: "/home/<someFolderLocation>/certs-pv"
- 这些信息应该在
nginx.conf
的 Nginx 反向代理部分重新使用
4. 在您的 nc-svc.yaml 中,您可以将服务类型更改为 类型:NodePort
5. 如何验证您的服务器是否正常工作:
kubectl get pods,svc,ep -o wide
Pods:
pod/nc-6d8694659d-5przx 1/1 Running 0 15m 10.244.0.6
Svc:
service/svc-nc NodePort 10.102.90.88 <none> 80:32500/TCP
Endpoints:
endpoints/svc-nc 10.244.0.6:80
您可以从集群内部测试您的服务 运行ning 单独的 pod (f.e。ubuntu)
curl your_svc_name
您可以验证服务发现是否正常工作:
cat /etc/resolv.conf
nslokup svc_your_svc_name (your_svc_name.default.svc.cluster.local)
使用 NodePort 从集群外部:
curl NODE_IP:NODE_PORT ( if not please verify your firewall rules)
Once you provided hostname for your nextcloud service you should use
curl -vH 'Host:specified_hostname' http://external_ip/ (using http or https according to your configuration)
此外,您可以直接执行到您的数据库 pod
kuebctl exec -it db_pod -- /bin/bash and run
mysqladmin status -uroot -p$MARIADB_ROOT_PASSWORD
mysqlshow -uroot -p$MYSQL_ROOT_PASSWORD --status nextcloud
6. 我应该怎么做才能访问我的 nextcloud?
我没有做 tuto 部分 "Create self-signed certificates" 因为我不知道如何管理。
7. 如第 3 点所述。
8. 这部分我不清楚:from another machine with nginx route a CNAME to the service
请参考:
ExternalName Service 是服务的一种特殊情况,它没有选择器,而是使用 DNS 名称。
其他资源:
- 晒出你的Kubernetes service from your own custom domains
- 什么是 the difference between a CNAME and a Web Redirect?
希望对您有所帮助。
我的目标是:
- 使用 Nextcloud 创建一个 pod
- 创建一个服务来访问这个 pod
- 从另一台装有 nginx 的机器将 CNAME 路由到服务
我尝试用 Nextcloud 部署一个 pod 和一个访问它的服务,但实际上我无法访问它。我有一个错误:
message ERR_SSL_PROTOCOL_ERROR.
一开始我只是跟着一个tutorial但是我不想像解释的那样使用nginx因为我在另一台机器上有它
当我查看 pods (nextcloud + db) 和服务时,它们看起来不错,但当我尝试访问 nextcloud 时没有任何响应。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nc
name: nc
spec:
replicas: 1
selector:
matchLabels:
app: nc
strategy:
type: Recreate
template:
metadata:
labels:
app: nc
spec:
containers:
- env:
- name: DEBUG
value: "false"
- name: NEXTCLOUD_URL
value: http://test.fr
- name: NEXTCLOUD_ADMIN_USER
value: admin
- name: NEXTCLOUD_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: nextcloud
key: NEXTCLOUD_ADMIN_PASSWORD
- name: NEXTCLOUD_UPLOAD_MAX_FILESIZE
value: 4G
- name: NEXTCLOUD_MAX_FILE_UPLOADS
value: "20"
- name: MYSQL_DATABASE
value: nextcloud
- name: MYSQL_HOST
value: mariadb
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb
key: MYSQL_ROOT_PASSWORD
- name: MYSQL_USER
value: nextcloud
name: nc
image: nextcloud
ports:
- containerPort: 80
protocol: TCP
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/www/html
name: vnextcloud
subPath: html
- mountPath: /var/www/html/custom_apps
name: vnextcloud
subPath: apps
- mountPath: /var/www/html/config
name: vnextcloud
subPath: config
- mountPath: /var/www/html/data
name: vimages
subPath: imgnc
- mountPath: /var/www/html/themes
name: vnextcloud
subPath: themes
restartPolicy: Always
volumes:
- name: vnextcloud
persistentVolumeClaim:
claimName: nfs-pvcnextcloud
- name: vimages
persistentVolumeClaim:
claimName: nfs-pvcimages
为了创建服务,我使用了这个命令行:
kubectl expose deployment nc --type=NodePort --name=svc-nc --port 80
为了访问我的 nextcloud,我尝试了地址 @IP_MASTER:32500
我的问题是:
- 如何检查 pod 是否正常工作?
知道问题是来自服务还是 pod - 我应该怎么做才能访问我的 nextcloud?
我没有做 tuto 部分 "Create self-signed certificates" 因为我不知道如何管理。它应该在我的其他 Linux 机器上还是在我的 Kubernetes 集群中
1.请考虑使用稳定版nextcloud helm chart
2.这个教程有点过时了,也可以找到here
在 kubernetes 1.16 版本中,您应该将所有部署的 apiVersion 更改为 apiVersion: apps/v1
请查看 Deprecations and Removals。
此外,您应该会收到错误 ValidationError(Deployment.spec): missing required field "selector"
,因此请在 Deployment.spec
下的部署中添加选择器,例如:
selector:
matchLabels:
app: db
3. 最后创建自签名证书。这个 repo 使用 OMGWTFSSL - Self Signed SSL Certificate Generator。一旦您提供了必要的信息,如服务器名称、本地路径 hostpath
和 SSL 证书的名称,它将在指定的 hostpath
:[=31= 下的一个 pod-运行 后自动创建]
volumes:
- name: certs
hostPath:
path: "/home/<someFolderLocation>/certs-pv"
- 这些信息应该在
nginx.conf
的 Nginx 反向代理部分重新使用
4. 在您的 nc-svc.yaml 中,您可以将服务类型更改为 类型:NodePort
5. 如何验证您的服务器是否正常工作:
kubectl get pods,svc,ep -o wide
Pods:
pod/nc-6d8694659d-5przx 1/1 Running 0 15m 10.244.0.6
Svc:
service/svc-nc NodePort 10.102.90.88 <none> 80:32500/TCP
Endpoints:
endpoints/svc-nc 10.244.0.6:80
您可以从集群内部测试您的服务 运行ning 单独的 pod (f.e。ubuntu)
curl your_svc_name
您可以验证服务发现是否正常工作:
cat /etc/resolv.conf
nslokup svc_your_svc_name (your_svc_name.default.svc.cluster.local)
使用 NodePort 从集群外部:
curl NODE_IP:NODE_PORT ( if not please verify your firewall rules)
Once you provided hostname for your nextcloud service you should use
curl -vH 'Host:specified_hostname' http://external_ip/ (using http or https according to your configuration)
此外,您可以直接执行到您的数据库 pod
kuebctl exec -it db_pod -- /bin/bash and run
mysqladmin status -uroot -p$MARIADB_ROOT_PASSWORD
mysqlshow -uroot -p$MYSQL_ROOT_PASSWORD --status nextcloud
6. 我应该怎么做才能访问我的 nextcloud? 我没有做 tuto 部分 "Create self-signed certificates" 因为我不知道如何管理。
7. 如第 3 点所述。
8. 这部分我不清楚:from another machine with nginx route a CNAME to the service
请参考: ExternalName Service 是服务的一种特殊情况,它没有选择器,而是使用 DNS 名称。
其他资源:
- 晒出你的Kubernetes service from your own custom domains
- 什么是 the difference between a CNAME and a Web Redirect?
希望对您有所帮助。