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年度中興通訊云網生態峰會在深圳成...
關閉