我使用尼吉斯控制器在GKE上设置了一个新的kubernetes集群。TLS不起作用,它使用的是假证书。
有很多配置细节,所以我做了一个回购入口。
总之,这些步骤是
nginx-ingress配置来自https://zihao.me/post/cheap-out-google-container-engine-load-balancer/ (看起来非常类似于ingress中的许多示例)。
我的ingress.yaml与示例一几乎相同
当我跑到卷发的时候
$ 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
[...]这表明我仍然在使用默认证书。
我怎么才能用我的?
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: 80kubectl 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;发布于 2017-10-13 19:45:34
事实证明,入口定义需要看起来像:
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下的一个主机条目。
发布于 2020-04-10 15:15:54
只是在v0.30.0中也遇到了这个问题,事实证明,在没有显式主机名的情况下拥有这样的入口配置是可以的:
spec:
tls:
- secretName: ssl-certificate就我而言,问题是我在入口上有一个注释,它的int64值没有被正确地解析,下面是定义kubernetes.io/ingress.class,因此本质上nginx找不到日志中正确声明的入口控制器:
ignoring add for ingress <ingressname> based on annotation kubernetes.io/ingress.class with value因此,在注释中使用字符串解决了问题。
发布于 2021-03-16 21:08:58
您需要将根CA证书添加到诸如chrome、firefox等地方的权威部分,这是服务器的证书池。
您的计算机现在将自动识别其他证书,您已经生成了此证书。
https://stackoverflow.com/questions/46734784
复制相似问题