Kubernetes 双协议栈网络验证指南

Kubernetes 双协议栈网络验证指南

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

前言

随着互联网向 IPv6 迁移的趋势,Kubernetes 从 1.23 版本开始正式支持 IPv4/IPv6 双协议栈网络。本文将详细介绍如何验证 Kubernetes 集群的双协议栈网络功能是否正常工作。

准备工作

在开始验证前,请确保你的环境满足以下条件:

  1. 基础设施支持:云服务商或本地基础设施必须能够为 Kubernetes 节点提供可路由的 IPv4 和 IPv6 网络接口
  2. 网络插件:安装支持双协议栈的 CNI 网络插件
  3. 集群配置:Kubernetes 集群已启用双协议栈功能

注意:虽然可以在较早版本的 Kubernetes 中进行验证,但双协议栈功能是在 1.23 版本才正式 GA 的。

节点网络验证

检查节点 CIDR 分配

每个双协议栈节点应该被分配一个 IPv4 CIDR 块和一个 IPv6 CIDR 块。可以通过以下命令验证:

kubectl get nodes <node-name> -o go-template --template='{{range .spec.podCIDRs}}{{printf "%s\n" .}}{{end}}'

预期输出示例:

10.244.1.0/24
2001:db8::/64

验证节点接口

检查节点是否正确地识别了 IPv4 和 IPv6 网络接口:

kubectl get nodes <node-name> -o go-template --template='{{range .status.addresses}}{{printf "%s: %s\n" .type .address}}{{end}}'

预期输出应包含节点的 IPv4 和 IPv6 地址:

Hostname: k8s-node-1
InternalIP: 10.0.0.5
InternalIP: 2001:db8:10::5

Pod 网络验证

检查 Pod IP 分配

验证 Pod 是否同时获得了 IPv4 和 IPv6 地址:

kubectl get pods <pod-name> -o go-template --template='{{range .status.podIPs}}{{printf "%s\n" .ip}}{{end}}'

预期输出示例:

10.244.1.4
2001:db8::4

通过 Downward API 验证

可以在 Pod 内部通过环境变量获取 IP 地址信息:

env:
- name: MY_POD_IPS
  valueFrom:
    fieldRef:
      fieldPath: status.podIPs

在容器内执行:

kubectl exec -it <pod-name> -- set | grep MY_POD_IPS

将看到类似输出:

MY_POD_IPS=10.244.1.4,2001:db8::4

检查 /etc/hosts 文件

Kubernetes 会自动将 Pod 的 IP 地址写入容器的 /etc/hosts 文件:

kubectl exec -it <pod-name> -- cat /etc/hosts

输出中应包含 Pod 的双栈 IP 地址:

10.244.1.4    pod01
2001:db8::4    pod01

服务验证

单协议栈服务

创建不指定 ipFamilyPolicy 的 Service 时,Kubernetes 会默认使用单协议栈模式:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

验证服务 IP:

kubectl get svc my-service -o yaml

输出将显示服务只获取了 IPv4 地址。

显式指定 IPv6 优先

可以强制服务使用 IPv6 地址:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ipFamilies:
  - IPv6
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

双协议栈服务

创建双协议栈服务:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ipFamilyPolicy: PreferDualStack
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

使用 describe 命令查看详细信息:

kubectl describe svc my-service

输出应显示服务同时拥有 IPv4 和 IPv6 地址。

负载均衡服务

如果云提供商支持 IPv6 负载均衡器,可以创建双协议栈的 LoadBalancer 类型服务:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ipFamilyPolicy: PreferDualStack
  ipFamilies:
  - IPv6
  type: LoadBalancer
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

验证服务:

kubectl get svc my-service

预期输出将显示 IPv6 的 CLUSTER-IP 和 EXTERNAL-IP。

总结

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田珉钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值