概述:IPv4 和 IPv6 双堆栈网络
总结 云原生 Contrail® 网络™ 为您的 Kubernetes 群集支持双堆栈网络。启动 Kubernetes 群集时,双堆栈默认处于启用状态。然后,云原生 Contrail 网络部署人员会创建双堆栈 (IPv4、IPv6) Pod 网络和服务网络。
IPv4 和 IPv6 概述
企业网络的规模和复杂性不断增加,这意味着对 IP 地址的需求比以往任何时候都更加巨大。由于对 IP 地址的需求不断增加,服务提供商分配的 IPv4 地址数量十分稀缺。此外,服务提供商必须同时为当前的 IPv4 客户和新 IPv6 客户提供服务。由于 IPv4 由当前大多数网络基础架构组成,因此这些 IPv6 网络中的大多数试图与 IPv4 目标进行通信。
IPv4 地址的稀缺性已不是什么新问题,双堆栈虚拟网络等现代解决方案有效地促进了 IPv4 和 IPv6 之间的过渡。双堆栈设备的网络接口同时发送和接收 IPv4 和 IPv6 数据包。如果是虚拟网络,Kubernetes 群集的双堆栈功能会同时为 Pod 分配 IPv4 地址和 IPv6 地址。
双堆栈网络先决条件
双堆栈网络需要具备以下要求:
-
Kubernetes 1.20 或更高版本
-
提供商对双堆栈网络的支持
您的提供商必须能够为 Kubernetes 节点提供可路由的 IPv4 和 IPv6 网络接口。
-
支持双堆栈的网络插件(随云原生 Contrail 网络一起提供)
启用双堆栈网络
以下 Kubernetes 发行版支持双堆栈网络:
- Kubeadm
- 库贝斯普拉伊
您必须设置启用双堆栈 featureGate
的 Kubeadm 或 Kubespray Kubernetes 群集。
考虑以下 YAML 文件。请注意,双堆栈 featureGate
标志是 IPv6DualStack: true
且 IPv6 无类域间路由 (CIDR) 子网显示为 podSubnet
和 serviceSubnet
。
apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 0.0.0.0 bindPort: 6443 nodeRegistration: name: hostname criSocket: unix:///var/run/crio/crio.sock kubeletExtraArgs: fail-swap-on: "false" network-plugin: "cni" cni-conf-dir: "/etc/cni/net.d" cni-bin-dir: "/opt/cni/bin" --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes-contrail-dev controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: k8s.gcr.io kind: ClusterConfiguration kubernetesVersion: v1.20.0 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12,2222:0:0:0::/108 podSubnet: 192.168.0.0/16,2001:0:0:0::/64 scheduler: {} featureGates: IPv6DualStack: true --- apiVersion: kubelet.config.k8s.io/v1beta1 authentication: anonymous: enabled: false webhook: cacheTTL: 0s enabled: true x509: clientCAFile: /etc/kubernetes/pki/ca.crt authorization: mode: Webhook webhook: cacheAuthorizedTTL: 0s cacheUnauthorizedTTL: 0s cgroupDriver: systemd clusterDNS: - 10.96.0.10 clusterDomain: cluster.local cpuManagerReconcilePeriod: 0s evictionPressureTransitionPeriod: 0s fileCheckFrequency: 0s healthzBindAddress: 127.0.0.1 healthzPort: 10248 httpCheckFrequency: 0s imageMinimumGCAge: 0s kind: KubeletConfiguration logging: {} nodeStatusReportFrequency: 0s nodeStatusUpdateFrequency: 0s rotateCertificates: true runtimeRequestTimeout: 0s shutdownGracePeriod: 0s shutdownGracePeriodCriticalPods: 0s staticPodPath: /etc/kubernetes/manifests streamingConnectionIdleTimeout: 0s syncFrequency: 0s volumeStatsAggPeriod: 0s
podNetwork
。您创建的后续 Pod 网络包含一个 IPv6 子网。因此,Pod 会接收 IPv4 和 IPv6 地址。
云原生 Contrail 网络目前不支持服务 IPv6。仅服务网络为 IPv4。