Google容器引擎 - 如何更新L7入口以加载新的TLS证书?

时间:2016-05-18 11:51:05

标签: load-balancing google-compute-engine kubernetes google-kubernetes-engine

我在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,即使潜在的秘密改变,它目前保持不变。

4 个答案:

答案 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分钟)。