nginx-ingress代理启用SSL的TCP服务出现SSL握手失败如何解决
两种方案均可以实现,具体操作方法如下:
方案一:直接禁用TCP健康检查
你可以选择全局禁用所有TCP服务的健康检查,也可以仅针对ZooKeeper服务单独禁用:
- 全局禁用:修改
ingress-nginx命名空间下名为nginx-configuration的全局ConfigMap,添加参数enable-tcp-health-check: "false",重启Ingress Nginx Pod后生效 - 单服务禁用:修改
tcp-servicesConfigMap中ZooKeeper对应的端口配置,在配置行末尾添加no_health_check参数即可,参考配置如下:
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-nginx data: # 2181为对外暴露的端口,后面替换为你实际的ZK服务地址 "2181": "default/zookeeper:2181 no_health_check"
方案二:配置健康检查使用SSL证书
如果需要保留健康检查能力,你可以直接在tcp-services ConfigMap的对应配置中添加SSL相关参数,让Nginx健康检查时完成正常SSL握手:
- 如果ZooKeeper仅开启服务端SSL单向认证,仅需要在配置行末尾添加
ssl参数即可,Nginx会自动发起SSL握手 - 如果ZooKeeper开启了双向认证,或者需要校验ZK服务端证书有效性,需要额外指定CA证书、客户端证书和密钥路径,对应证书文件需要提前通过Secret挂载到Ingress Nginx Pod的对应路径下,参考配置如下:
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-nginx data: "2181": "default/zookeeper:2181 ssl ssl_ca_cert /etc/nginx/ssl/zk-ca.crt ssl_certificate /etc/nginx/ssl/zk-client.crt ssl_certificate_key /etc/nginx/ssl/zk-client.key"
内容的提问来源于stack exchange,提问作者Optimus
相关产品推荐
相关产品推荐

