暴力解决calico网络hostPort不工作的问题
今天在生产环境部署多个 istio Ingressgateway 的时候直接把端口以 hostPort 的方式撸了出来,在我的测试环境亲测工作得很欢快。但是撸到线上环境就各种起不来,具体情况如下:
- 访问 pod 的 IP:Port 正常
- 访问 host 的 IP:Port 无法正常工作,端口不监听
看来看去配置文件的问题应该是没有的,配置 hostPort 的配置如下:
apiVersion: extensions/v1beta1
kind: DaemonSet
...
spec:
...
template:
...
containers:
ports:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
因为测试环境是自己的集群,版本比较新,相关组件版本为
Kubernetes v1.11.1
Calico 3.1.3 (commit: 231083c2)
线上环境 Kubernetes v1.9.x, Calico 1.6.0
Google 爸爸告诉我们的资料:
关注到 https://github.com/kubernetes/kops/pull/3206/files#diff-891cbc61587adb202b66b7c9bc6896daR41
然后对比一下 线上环境的 /etc/cni/net.d/10-calico.conf
和 测试环境的 /etc/cni/net.d/10-calico.conflist
发现:
- conf 和 conflist 的配置格式不尽相同
- 没有关于
portmap
的配置
于是乎做出了一个大胆的想法,把线上相关节点的 10-calico.conf
改写为 10-calico.conflist
并启用相关的 plugins,然后端口正常跑起来了。
⚠️ 对这种骚操作,因为修改的节点上并没有其他业务,所以压力不大,如果要在正在跑业务的节点做这种操作请慎重。