我在L7 load balancing ingress上使用标准Google Container Engine。我通过以下入口定义安装了它:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: l7-ingress-{{environment}}
spec:
tls:
- secretName: web-secret
backend:
serviceName: web
servicePort: 80
现在,我的问题是,一旦秘密web-secret
发生变化,我如何确保更新TLS证书? AFAICT,即使潜在的秘密改变,它目前保持不变。
答案 0 :(得分:4)
显然,L7入口目前还没有监控TLS秘密的变化。但解决这个问题的a PR已合并,所以它应该只是时间问题。
答案 1 :(得分:3)
我解决此问题的经验是删除并创建入口,但要确保在传递给kubectl create -f
的YAML中指定IP:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dev-ing
spec:
tls:
- secretName: tls-sekret
rules:
- host: tryout.example.com
http:
paths:
- backend:
serviceName: nginx
servicePort: 80
status:
loadBalancer:
ingress:
- ip: 130.211.n.n
我无法找到任何文档说明这是确保您获得相同IP的方法,但对我来说它有效。在生产系统中谨慎使用,你不能放松IP!
答案 2 :(得分:2)
我只是尝试了一个简单的应用于编辑的秘密,是的,它是有效的。 Web控制台和gcloud compute ssl-certificates list
立即报告了更改,负载均衡器在大约10分钟内开始提供服务。有这个正式记录会很高兴!特别是因为在k8s的其他角落里,秘密的变化不会像部署那样被自动拾取,所以我们不会把它视为理所当然。
答案 3 :(得分:1)
如果更新,Google L7负载均衡器会交换基础证书。您必须应用正确的注释:
秘密
apiVersion: v1
kind: Secret
data:
tls.crt: xxx
tls.key: xxx
metadata:
name: tls-secret
type: kubernetes.io/tls
入口
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: dev-ing
annotations:
# Do not forget this annotation
kubernetes.io/ingress.class: "gce"
spec:
tls:
- hosts:
- tryout.example.com
secretName: tls-secret
backend:
serviceName: nginx
servicePort: 80
交换在某种程度上在后台发生,请注意所需的时间(5-15分钟)。