gpt4 book ai didi

nginx - 在 Kubernetes 中访问 Nextcloud 时出错

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:09 28 4
gpt4 key购买 nike

我的目标是:

  • 使用 Nextcloud 创建 pod
  • 创建一个服务来访问这个 pod
  • 从另一台使用 nginx 的机器将 CNAME 路由到服务

我尝试使用 Nextcloud 部署一个 pod 和一个访问它的服务,但实际上我无法访问它。我有一个错误:

message ERR_SSL_PROTOCOL_ERROR.

我刚刚关注了一个 tutorial一开始但我不想像解释的那样使用 nginx,因为我在另一台机器上有它。

当我查看 pod (nextcloud + db) 和服务时,它们看起来不错,但当我尝试访问 nextcloud 时没有任何响应。

enter image description here(nc = nextcloud)

enter image description here

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?
    我没有执行教程部分“创建自签名证书”,因为我不知道如何管理。它应该在我的其他 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 下运行一个 pod 后自动创建。 :

volumes:
- name: certs
hostPath:
path: "/home/<someFolderLocation>/certs-pv"
  • 这些信息应该在 nginx.conf 的 Nginx 反向代理部分重新使用

4. 在您的 nc-svc.yaml 中,您可以将服务类型更改为 type: 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

您可以从运行单独 pod(例如 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 部分“创建自签名证书”,因为我不知道如何管理。

7. 如第 3 点所述。

8. 这部分我不清楚:from another machine with nginx route a CNAME to the service

请引用:一个ExternalName Service是 Service 的一个特例,它没有选择器,而是使用 DNS 名称。

其他资源:

希望这对您有所帮助。

关于nginx - 在 Kubernetes 中访问 Nextcloud 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384354/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com