gpt4 book ai didi

ssl - Kubernetes NGINX 入口 Controller 未获取 TLS 证书

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:22 69 4
gpt4 key购买 nike

我使用 nginx-ingress 在 GKE 上设置了一个新的 kubernetes 集群 Controller 。 TLS 不工作,它使用的是假证书。

有很多配置细节,所以我做了一个 repo - https://github.com/jobevers/test_ssl_ingress

简而言之,步骤是

  • 创建一个没有 GKE 负载均衡器的新集群
  • 使用我的 key 和证书创建一个 tls secret
  • 创建一个 nginx-ingress 部署/pod
  • 创建入口 Controller

nginx-ingress 配置来自https://zihao.me/post/cheap-out-google-container-engine-load-balancer/ (并且看起来与 ingress-nginx 存储库中的许多示例非常相似)。

我的 ingress.yaml 几乎与 the example one 相同

当我运行 curl 时,我得到

$ curl -kv https://35.196.134.52
[...]
* common name: Kubernetes Ingress Controller Fake Certificate (does not match '35.196.134.52')
[...]
* issuer: O=Acme Co,CN=Kubernetes Ingress Controller Fake Certificate
[...]

这表明我仍在使用默认证书。

我应该如何使用我的获取它?


Ingress definition

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ssl-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- secretName: tls-secret
rules:
- http:
paths:
- path: /
backend:
serviceName: demo-echo-service
servicePort: 80

Creating the secret :

kubectl create secret tls tls-secret --key tls/privkey.pem --cert tls/fullchain.pem

进一步调试,正在服务器上找到并存在证书:

$ kubectl -n kube-system exec -it $(kubectl -n kube-system get pods | grep ingress | head -1 | cut -f 1 -d " ") -- ls -1 /ingress-controller/ssl/
default-fake-certificate-full-chain.pem
default-fake-certificate.pem
default-tls-secret-full-chain.pem
default-tls-secret.pem

而且,从日志中,我看到

kubectl -n kube-system log -f $(kubectl -n kube-system get pods | grep ingress | head -1 | cut -f 1 -d " ")
[...]
I1013 17:21:45.423998 6 queue.go:111] syncing default/test-ssl-ingress
I1013 17:21:45.424009 6 backend_ssl.go:40] starting syncing of secret default/tls-secret
I1013 17:21:45.424135 6 ssl.go:60] Creating temp file /ingress-controller/ssl/default-tls-secret.pem236555242 for Keypair: default-tls-secret.pem
I1013 17:21:45.424946 6 ssl.go:118] parsing ssl certificate extensions
I1013 17:21:45.743635 6 backend_ssl.go:102] found 'tls.crt' and 'tls.key', configuring default/tls-secret as a TLS Secret (CN: [...])
[...]

但是,查看 nginx.conf,它仍然使用假证书:

$ kubectl -n kube-system exec -it $(kubectl -n kube-system get pods | grep ingress | head -1 | cut -f 1 -d " ") -- cat /etc/nginx/nginx.conf | grep ssl_cert
ssl_certificate /ingress-controller/ssl/default-fake-certificate.pem;
ssl_certificate_key /ingress-controller/ssl/default-fake-certificate.pem;

最佳答案

事实证明,入口定义需要如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ssl-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- app.example.com
secretName: tls-secret
rules:
- host: app.example.com
http:
paths:
- path: /
backend:
serviceName: demo-echo-service
servicePort: 80

规则下的主机条目需要匹配 tls 下的主机条目之一。

关于ssl - Kubernetes NGINX 入口 Controller 未获取 TLS 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46734784/

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