使用 kubeadm 的双栈支持
Kubernetes v1.23 [稳定]
您的 Kubernetes 集群包括双栈网络,这意味着集群网络允许您使用任何地址族。在集群中,控制平面可以为单个Pod或服务分配 IPv4 地址和 IPv6 地址。
开始之前
您需要按照安装 kubeadm中的步骤安装kubeadm工具。
对于要用作节点的每个服务器,请确保它允许 IPv6 转发。
启用 IPv6 数据包转发
检查是否启用了 IPv6 数据包转发
sysctl net.ipv6.conf.all.forwarding
如果输出为 net.ipv6.conf.all.forwarding = 1
,则表示已启用。否则,尚未启用。
手动启用 IPv6 数据包转发
# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee -a /etc/sysctl.d/k8s.conf
net.ipv6.conf.all.forwarding = 1
EOF
# Apply sysctl params without reboot
sudo sysctl --system
您需要使用 IPv4 和 IPv6 地址范围。集群操作员通常使用私有地址范围进行 IPv4。对于 IPv6,集群操作员通常从 2000::/3
中选择一个全局单播地址块,使用分配给该操作员的范围。您不必将集群的 IP 地址范围路由到公共互联网。
IP 地址分配的大小应适合您计划运行的 Pod 和服务数量。
注意
如果您正在使用kubeadm upgrade
命令升级现有集群,则 kubeadm
不支持修改 Pod IP 地址范围(“集群 CIDR”)或集群的服务地址范围(“服务 CIDR”)。创建双栈集群
要使用 kubeadm init
创建双栈集群,您可以传递类似于以下示例的命令行参数
# These address ranges are examples
kubeadm init --pod-network-cidr=10.244.0.0/16,2001:db8:42:0::/56 --service-cidr=10.96.0.0/16,2001:db8:42:1::/112
为了更清楚起见,这是一个主双栈控制平面节点的 kubeadm 配置文件 kubeadm-config.yaml
的示例。
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
podSubnet: 10.244.0.0/16,2001:db8:42:0::/56
serviceSubnet: 10.96.0.0/16,2001:db8:42:1::/112
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "10.100.0.1"
bindPort: 6443
nodeRegistration:
kubeletExtraArgs:
- name: "node-ip"
value: "10.100.0.2,fd00:1:2:3::2"
InitConfiguration 中的 advertiseAddress
指定 API 服务器将通告其正在监听的 IP 地址。advertiseAddress
的值等于 kubeadm init
的 --apiserver-advertise-address
标志。
运行 kubeadm 以初始化双栈控制平面节点
kubeadm init --config=kubeadm-config.yaml
kube-controller-manager 标志 --node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6
设置为默认值。请参阅配置 IPv4/IPv6 双栈。
注意
--apiserver-advertise-address
标志不支持双栈。将节点加入双栈集群
在加入节点之前,请确保节点具有 IPv6 可路由网络接口,并且允许 IPv6 转发。
这是一个将工作节点加入集群的 kubeadm 配置文件 kubeadm-config.yaml
的示例。
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
discovery:
bootstrapToken:
apiServerEndpoint: 10.100.0.1:6443
token: "clvldh.vjjwg16ucnhp94qr"
caCertHashes:
- "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
# change auth info above to match the actual token and CA certificate hash for your cluster
nodeRegistration:
kubeletExtraArgs:
- name: "node-ip"
value: "10.100.0.2,fd00:1:2:3::3"
此外,这是一个将另一个控制平面节点加入集群的 kubeadm 配置文件 kubeadm-config.yaml
的示例。
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
controlPlane:
localAPIEndpoint:
advertiseAddress: "10.100.0.2"
bindPort: 6443
discovery:
bootstrapToken:
apiServerEndpoint: 10.100.0.1:6443
token: "clvldh.vjjwg16ucnhp94qr"
caCertHashes:
- "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
# change auth info above to match the actual token and CA certificate hash for your cluster
nodeRegistration:
kubeletExtraArgs:
- name: "node-ip"
value: "10.100.0.2,fd00:1:2:3::4"
JoinConfiguration.controlPlane 中的 advertiseAddress
指定 API 服务器将通告其正在监听的 IP 地址。advertiseAddress
的值等于 kubeadm join
的 --apiserver-advertise-address
标志。
kubeadm join --config=kubeadm-config.yaml
创建单栈集群
注意
双栈支持并不意味着您需要使用双栈寻址。您可以部署已启用双栈网络功能的单栈集群。为了更清楚起见,这是一个单栈控制平面节点的 kubeadm 配置文件 kubeadm-config.yaml
的示例。
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/16
下一步
- 验证 IPv4/IPv6 双栈网络
- 阅读有关双栈集群网络的信息
- 了解有关 kubeadm 配置格式的更多信息