Kubernetes ingress:如何启用HTTPS后端服务

时间:2017-10-17 22:53:39

标签: kubernetes google-kubernetes-engine

具有TLS配置的典型入口如下所示:

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: no-rules-map spec: tls: - secretName: testsecret backend: serviceName: s1 servicePort: 80

默认情况下,负载均衡器将与HTTP中的后端服务进行通信。我可以配置Ingress,以便负载均衡器和后端服务之间的通信也是HTTPS吗?

更新

发现GLBC正在讨论为GCE Ingress启用HTTPS后端。摘自文件:

“Backend HTTPS

对于负载均衡器和Kubernetes服务之间的加密通信,您需要按照期望的HTTPS来装饰服务的端口。有一个alpha服务注释,用于指定每个服务端口的预期协议。在将协议视为HTTPS时,入口控制器将使用带有HTTPS运行状况检查的HTTPS后端服务组装GCP L7负载均衡器。“

目前尚不清楚负载均衡器是否接受第三方签名服务器证书,自签名或两者兼而有之。如何在负载均衡器上配置CA证书以执行后端服务器身份验证。或者它将绕过身份验证检查。

3 个答案:

答案 0 :(得分:2)

按照GLBC的“后端HTTPS”部分中的说明操作, GCP HTTP(S)负载均衡器将与后端建立HTTPS连接,流量将被加密。没有必要在LB端配置CA证书(实际上你不能)。这意味着负载均衡器将跳过服务器证书身份验证。

答案 1 :(得分:1)

您应该为入口或负载均衡器启用SSL-Passthrough配置。 我建议您使用nginx ingress和kube-lego进行SSL。

使用此组合,您可以使用ssl-passthrough config。

Nginx ingress for k8s

kube-lego for generating SSL certificate on the fly

Guidance for enable ssl-passthrough config

答案 2 :(得分:0)

ingress-nginx上,您可以使用nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" 批注并将其指向服务上的HTTPS端口。

这是特定于入口控制器的,其他入口控制器可能不提供该选项(或提供工作方式不同的选项)

通过此设置,入口控制器将对流量进行解密。 (这使入口控制器可以控制密码和呈现给用户的证书之类的内容,并执行基于路径的路由,而SSL传递是不允许的)

可以使用其他(ingress-nginx特定)批注配置证书验证: Docs

  • nginx.ingress.kubernetes.io/proxy-ssl-verify(默认为“关闭”)
  • nginx.ingress.kubernetes.io/proxy-ssl-verify-depth
  • nginx.ingress.kubernetes.io/proxy-ssl-ciphers(密码,与验证无关)
  • nginx.ingress.kubernetes.io/proxy-ssl-name(覆盖检查证书所依据的名称)
  • nginx.ingress.kubernetes.io/proxy-ssl-protocols(SSL / TLS版本)
  • nginx.ingress.kubernetes.io/proxy-ssl-server-name(SNI直通)