背景:
集群sit环境中部署有au的服务模块,通过service LoadBalancer (SLB) 代理出去,置了externalTrafficPolicy: Local类型,这种类型的SLB地址只有在Node中部署了对应的后端Pod,才能被访问。因为SLB的地址是集群外使用,如果集群节点和Pod不能直接访问,请求不会到SLB,会被当作Service的扩展IP地址,被kube-proxy的iptables或ipvs转发
需要将其改为cluster类型externalTrafficPolicy,然后发现网络同类,报错如下
[root@iZ2zehqy0fmdhfb4n5op8oZ ~]# curl -k https://acsit.jrdaimao.com
curl: (35) SSL received a record that exceeded the maximum permissible length.
问题排查:
登录node节点执行
[root@iZ2zehqy0fmdhfb4n5op8oZ ~]# ip route get 112.126.68.1 (这个ip为acsit.jrdaimao.com线上ip)
local 112.126.68.1 dev lo src 112.126.68.1
cache <local>
发现还是走的lo网卡,集群内转发,而不是通过eth0出到互联网,访问到SLB上。
集群网络模式为ipvs, ipvs 拦截的是EXTERNAL-IP 这个字段的地址,pod内访问您slb的地址,是被ipvs拦截的,导致请求没有到达slb,直接被ipvs转发到了您后端pod 上了,证书是配置在slb上的,所以https访问肯定是没有证书的,就会报错
解决办法:
1.删除公网的slb,新建内网的slb
2.找到新建内网的 slb,买公网,给这个slb绑一个公网ip