经过dnat后访问kube-apiserver证书认证失败

问题现象

iptables -t nat -I OUTPUT -d 10.10.10.10 -p tcp --dport 443 -j DNAT --to-destination 192.168.0.105:6443
# 报错requested domain name does not match the server's certificate,无法通过证书认证。
curl https://10.10.10.10:443/livez --key ./client.key --cert ./client.crt --cacert ./root.crt

问题分析

# 通过cluster ip访问kube-apiserver,https证书认证通过。
curl https://10.96.0.1:443/livez --key ./client.key --cert ./client.crt --cacert ./root.crt

因为kube-apiserver服务端证书中有10.96.0.1这个clusterIP。

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text

nodeA(192.168.0.112,增加iptables,走http访问,https因加密而无法看到传输的数据)->nodeB(192.168.0.105,kube-apiserver所在节点)

kube-apiserver所在节点接收到的请求,http请求参数里面Host还是10.10.10.10:443,没有因为dnat发生转换,所以无法通过https证书认证。

解决问题

kube-apiserver配置token认证,例如通过ServiceAccount,使用kube-controller-manager创建的token。

posted on 2024-05-08 23:53  王景迁  阅读(20)  评论(0编辑  收藏  举报

导航