k8s双栈协议无法访问集群外ipv6服务(解决)
问题背景
k8s集群升级了双协议栈后,从集群内无法访问外部ipv6服务,已经确认部署了Endpoint和Service。而同样采用ipv4是没问题的。
1 部署Endpoint和Service
apiVersion: v1kind: Servicemetadata: name: myep namespace: default labels: app: myepspec: ports: - name: http-8080 port: 8080 protocol: TCP targetPort: 8080 ipFamilies: - IPv6---apiVersion: v1kind: EndpointsapiVersion: v1metadata: name: myep #此名字需与 Service 中的 metadata.name 的值一致 namespace: default labels: app: myepsubsets: - addresses: - ip: 1002:003B:456C:678D:890E:0012:234F:56G7 ## 集群外Ip ports: - port: 8080 name: http-8080
然后在集群的Pod中访问myep:8080不通。
分析
通过tcpdump在1002:003B:456C:678D:890E:0012:234F:56G7这台机器山上抓包:tcpdump -i eth0 host 1002:003B:456C:678D:890E:0012:234F:56G7 tcp -vv
发现可以收到发来的请求,但是并没有回包。
(资料图片仅供参考)
2 增加SNAT的iptables策略
这里采用了一种比较简单的解决方案,最终方案应该通过集群的cni配置解决。
为所有的宿主机添加iptables策略:
ip6tables -t nat -A POSTROUTING -s 2000:100:100:100::/64 -o eth0 -j SNAT --to-source FC00:0:130F::9C0:876A:130B
参数 | 说明 |
---|---|
-s | 要处理的源IP段 |
-o | 规则绑定的接口 |
--to-source | 替换的IP(本机IP) |
增加iptables策略后服务就可以访问了。
一些弯路
最初在服务所在主机上通过增加静态路由的方式也可以临时性达到目的:
ip -6 route add 2000:100:100:100::/64 via FC00:0:130F::9C0:876A:130B
相当于把Pod所在宿主机作为Pod内部网段的网关,这样可以临时解决问题,当时由于Pod会在集群的Node上漂移,所以这不是一个好的方法。
关键词:
推荐
-
-
-
-
荣耀笔记本三叉戟首秀 荣耀MagicBook14系列2023上市
荣耀举行荣耀MagicBook 14系列新品发布会,推出荣耀MagicBook 14 2023和荣耀MagicBook 14 Pro 202...
来源:TechWeb -
-
-
苹果iPhone15Pro机模视频展示新按钮 USB-C等外观设计
日前一个 iPhone 15 Pro 机模出现在抖音分享的视频中,提供了对该设备传闻中的设计的近距离观察。预...
来源:TechWeb -
-
-
直播更多》
-
小米13Ultra发布:告别数码味 回归影像光学原点
小米集团在京召开新品发布会,正式发布...
-
小米13Ultra发布:告别数码味 回归影像光学原点
小米集团在京召开新品发布会,正式发布...
-
华为超联接笔记本MateBookD14发布 这才是大学生与新锐白领的梦中情本!
在当代大学生和新锐职场人士的眼中,如...
-
库克担任苹果CEO已4250天 成苹果任职时间最长正式CEO
据外媒报道,自2011年8月25日接替乔布斯...
-
小米13Ultra将首发索尼IMX858传感器:所有副摄与主摄严格拉齐
据官方日前确认,全新的小米13 Ultra将...
-
多款重磅新品及解决方案发布 中兴通讯举办2023年度云网生态峰会
2023年度中兴通讯云网生态峰会在深圳成...
关闭