【发布时间】:2018-12-20 10:42:06
【问题描述】:
我们已经设置 Kubernetes 与 nginx-ingress 结合 cert-manager 使用 LetsEncrypt 使用本指南自动获取和使用入口域的 SSL 证书:https://medium.com/@maninder.bindra/auto-provisioning-of-letsencrypt-tls-certificates-for-kubernetes-services-deployed-to-an-aks-52fd437b06b0。结果是每个 Ingress 都定义了自己的 SSL 证书,由 cert-manager 自动配置。
这一切都很好,但有一个问题,流量的源 IP 地址丢失给 Pod 中的应用程序。
建议使用注释来应用于nginx-ingress 控制器服务service.beta.kubernetes.io/aws-load-balancer-backend-protocol: '*'。这具有保留源 IP 地址的效果。但是,这样做会破坏 SSL:
An error occurred during a connection to {my.domain.com}. SSL received a record that exceeded the maximum permissible length. Error code: SSL_ERROR_RX_RECORD_TOO_LONG
我的头开始旋转。有谁知道这方面的任何方法(在我看来,这将是一个常见的要求)?
入口配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-http-ingress
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
spec:
rules:
- host: my.host.com
http:
paths:
- path: /
backend:
serviceName: my-http-service
servicePort: 80
tls:
- hosts:
- "my.host.com"
secretName: malcolmqa-tls
【问题讨论】:
-
你能分享你的入口资源配置吗?
-
添加了入口配置。顺便说一句,我将整个集群移至 GCE 并成功地实现了我想要的目标(并且整个体验变得不那么令人不快了)。在 GCE 中,将
controller.service.externalTrafficPolicy=Local添加到stable/nginx-ingress的 Helm 安装/升级命令就可以了。
标签: ssl kubernetes amazon-eks