前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s双栈协议无法访问集群外ipv6服务(解决)

k8s双栈协议无法访问集群外ipv6服务(解决)

原创
作者头像
DifficultWork
修改2023-05-04 15:26:54
1K3
修改2023-05-04 15:26:54
举报
文章被收录于专栏:阶梯计划阶梯计划

问题背景

k8s集群升级了双协议栈后,从集群内无法访问外部ipv6服务,已经确认部署了Endpoint和Service。而同样采用ipv4是没问题的。

1 部署Endpoint和Service

代码语言:yaml
复制
apiVersion: v1
kind: Service
metadata:
  name: myep
  namespace: default
  labels:
    app: myep
spec:
  ports:
  - name: http-8080
    port: 8080
    protocol: TCP
    targetPort: 8080
  ipFamilies:
  - IPv6

---

apiVersion: v1
kind: Endpoints
apiVersion: v1
metadata:
  name: myep  #此名字需与 Service 中的 metadata.name 的值一致
  namespace: default
  labels:
    app: myep
subsets:
  - 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这台机器上抓包:
代码语言:shell
复制
tcpdump -i eth0 host 1002:003B:456C:678D:890E:0012:234F:56G7 tcp -vv

发现可以收到发来的请求,但是并没有回包。

  • 同样用tcpdump抓ipv4的包,是有回包的。
  • 分析ipv4和ipv6的差异:ipv4的SrcIP是Pod所在宿主机的ip,而ipv6的SrcIP是2000:100:100:100:9a7e:bead:f22c:9640,而2000:100:100:100::/64是集群内部的ipv6网段,可以确定ipv6的请求从Pod所在宿主机出来时没有进行SNAT转换。

2 增加SNAT的iptables策略

这里采用了一种比较简单的解决方案,最终方案应该通过集群的cni配置解决。

为所有的宿主机添加iptables策略:

代码语言:shell
复制
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策略后服务就可以访问了。

一些弯路

最初在服务所在主机上通过增加静态路由的方式也可以临时性达到目的:

代码语言:shell
复制
ip -6 route add 2000:100:100:100::/64 via FC00:0:130F::9C0:876A:130B

相当于把Pod所在宿主机作为Pod内部网段的网关,这样可以临时解决问题,当时由于Pod会在集群的Node上漂移,所以这不是一个好的方法。

3 修改CNI配置的方法

最好的方式还是通过修改CNI的配置解决,以Calico为例,需要修改IpPool的配置,将ipv6下面的NATOutgoing设置为true即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 1 部署Endpoint和Service
    • 分析
    • 2 增加SNAT的iptables策略
      • 一些弯路
      • 3 修改CNI配置的方法
      相关产品与服务
      专用宿主机
      专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档