Kubernetes中NGINX Ingress向后端服务发起TLS加密请求配置问题
你的问题核心是NGINX Ingress默认会校验后端HTTPS服务的证书合法性,而mocksvc使用的自签证书不在Ingress的默认信任列表里,导致加密连接失败。结合你的需求(明文请求进入Ingress,Ingress通过HTTPS连接后端),先纠正配置中的冗余项,再提供两种解决方案:
首先,移除配置中的ssl-passthrough: "true"——这个注解用于将TLS流量直接透传给后端,和你「Ingress接收明文HTTP请求」的需求完全不符,保留会干扰正常请求处理。
方案1:关闭后端证书验证(测试环境快速解决)
添加注解让Ingress跳过后端证书合法性校验,修改后的Ingress配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # 关闭后端证书验证,跳过合法性校验 nginx.ingress.kubernetes.io/backend-ssl-verify: "false" name: mock-ingress spec: rules: - host: mocksvc http: paths: - path: / pathType: Prefix backend: service: name: mocksvc port: number: 4000
方案2:导入自签CA证书让Ingress信任(生产/高安全场景)
如果需要保证连接安全性,可将mocksvc的自签CA证书导入Ingress的信任体系:
- 准备mocksvc的证书文件(如果是自签证书,直接使用
mocksvc.crt即可) - 创建存储CA证书的Secret:
kubectl create secret generic mock-ca-secret --from-file=ca.crt=/path/to/your/mocksvc.crt - 修改Ingress配置,指定信任的CA证书:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # 开启后端证书验证 nginx.ingress.kubernetes.io/backend-ssl-verify: "true" # 指定存储CA证书的Secret名称 nginx.ingress.kubernetes.io/backend-ssl-ca-certificate: "mock-ca-secret" name: mock-ingress spec: rules: - host: mocksvc http: paths: - path: / pathType: Prefix backend: service: name: mocksvc port: number: 4000
关键注解说明
backend-protocol: "HTTPS":明确告知Ingress使用HTTPS协议连接后端mocksvc- 方案1通过关闭证书校验快速解决问题,但存在中间人攻击风险,仅适合测试环境
- 方案2让Ingress信任自签证书,既保留了加密连接的安全性,又符合mocksvc的TLS接入要求
内容的提问来源于stack exchange,提问作者revenge spirit
相关产品推荐
相关产品推荐

