Google 容器引擎 - 如何更新 L7 入口以加载新的 TLS 证书?
Google Container Engine - How to update L7 ingress to load new TLS certificate?
我使用的是标准 L7 load balancing ingress on 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,即使底层秘密发生变化,它目前仍保持不变。
显然,L7 入口当前不监视 TLS 机密的更改。不过a PR解决这个问题已经合并了,所以应该只是时间问题。
我的解决方法是删除并创建入口,但要确保在传递给 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 的生产系统上谨慎使用!
我刚刚尝试对已编辑的机密进行简单应用,是的,它成功了。 Web 控制台和 gcloud compute ssl-certificates list
立即报告更改,负载均衡器在大约 10 分钟后开始提供服务。如果能正式记录下来就好了!特别是因为 k8s 的其他角落不会自动获取对秘密的更改,比如部署,所以我们不认为这是理所当然的。
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 分钟)。
我使用的是标准 L7 load balancing ingress on 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,即使底层秘密发生变化,它目前仍保持不变。
显然,L7 入口当前不监视 TLS 机密的更改。不过a PR解决这个问题已经合并了,所以应该只是时间问题。
我的解决方法是删除并创建入口,但要确保在传递给 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 的生产系统上谨慎使用!
我刚刚尝试对已编辑的机密进行简单应用,是的,它成功了。 Web 控制台和 gcloud compute ssl-certificates list
立即报告更改,负载均衡器在大约 10 分钟后开始提供服务。如果能正式记录下来就好了!特别是因为 k8s 的其他角落不会自动获取对秘密的更改,比如部署,所以我们不认为这是理所当然的。
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 分钟)。