使用Google Container Engine Ingress确保SSL一直到pod

时间:2017-06-03 22:21:41

标签: ssl kubernetes google-cloud-platform google-kubernetes-engine

我有一个使用自签名证书在443上为HTTPS流量提供服务,该证书的CN为app,与服务名称app匹配。它还在80上提供HTTP。

我还有一个Ingress对象,它在foo.com外部暴露了pod,我使用kube-lego为foo.com动态获取和配置LetsEncrypt证书:

spec:
  rules:
  - host: foo.com
    http:
      paths:
      - backend:
          serviceName: kube-lego-gce
          servicePort: 8080
        path: /.well-known/acme-challenge/*
      - backend:
          serviceName: app
          servicePort: 80
        path: /*
  tls:
  - hosts:
    - foo.com
    secretName: app-tls-staging

这意味着有两个级别的SSL。如果我将Ingress的servicePort设置为443以确保Google的LB和我的广告连播之间的流量已加密,则端点会返回502 Server Error。这是因为它不知道相信我的自签名证书吗?有没有办法指定CA?

一旦我将其设置回80,几分钟后Ingress就会再次正常工作。

1 个答案:

答案 0 :(得分:2)

您正在寻找的是"重新加密" for Load Balancer< =>集群流量。如果您看到here,则重新加密会列为"未来工作"。

但我看到此功能已合并:https://github.com/kubernetes/ingress/pull/519/commits

看起来您可以找到example here,它被描述为" Backend HTTPS"在本文档中:https://github.com/kubernetes/ingress/tree/master/controllers/gce#backend-https

然而今天这个功能似乎是alpha版本,所以它可能会有所变化,你可能需要创建一个alpha GKE集群(这是短暂的)来使用它。