Kubernetes 使用kubeadm支持双协议栈
使用 kubeadm 支持双协议栈
FEATURE STATE: Kubernetes v1.23 [stable]
你的集群包含双协议栈组网支持, 这意味着集群网络允许你在两种地址族间任选其一。在集群中,控制面可以为同一个 Pod 或者 Service 同时赋予 IPv4 和 IPv6 地址。
在开始之前
你需要已经遵从安装 kubeadm 中所给的步骤安装了 kubeadm 工具。
针对你要作为节点使用的每台服务器, 确保其允许 IPv6 转发。在 Linux 节点上,你可以通过以 root 用户在每台服务器上运行 sysctl -w net.ipv6.conf.all.forwarding=1
来完成设置。
你需要一个可以使用的 IPv4 和 IPv6 地址范围。集群操作人员通常为 IPv4 使用 私有地址范围。对于 IPv6,集群操作人员通常会基于分配给该操作人员的地址范围, 从 2000::/3
中选择一个全局的单播地址块。你不需要将集群的 IP 地址范围路由 到公众互联网。
Note:
如果你在使用 kubeadm upgrade
命令升级现有的集群,kubeadm
不允许更改 Pod 的 IP 地址范围(“集群 CIDR”),也不允许更改集群的服务地址范围(“Service CIDR”)。
创建双协议栈集群
要使用 kubeadm init
创建一个双协议栈集群,你可以传递与下面的例子类似的命令行参数:
# 这里的地址范围仅作示例使用
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-config.yaml
的 kubeadm 配置文件, 该文件用于双协议栈控制面的主控制节点。
---
apiVersion: kubeadm.k8s.io/v1beta3
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/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "10.100.0.1"
bindPort: 6443
nodeRegistration:
kubeletExtraArgs:
node-ip: 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
是使用默认值来设置的。
Note:
标志 --apiserver-advertise-address
不支持双协议栈。
向双协议栈集群添加节点
在添加节点之前,请确保该节点具有 IPv6 可路由的网络接口并且启用了 IPv6 转发。
下面的名为 kubeadm-config.yaml
的 kubeadm 配置文件 示例用于向集群中添加工作节点。
apiVersion: kubeadm.k8s.io/v1beta3
kind: JoinConfiguration
discovery:
bootstrapToken:
apiServerEndpoint: 10.100.0.1:6443
token: "clvldh.vjjwg16ucnhp94qr"
caCertHashes:
- "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
# 请更改上面的认证信息,使之与你的集群中实际使用的令牌和 CA 证书匹配
nodeRegistration:
kubeletExtraArgs:
node-ip: 10.100.0.3,fd00:1:2:3::3
下面的名为 kubeadm-config.yaml
的 kubeadm 配置文件 示例用于向集群中添加另一个控制面节点。
apiVersion: kubeadm.k8s.io/v1beta3
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"
# 请更改上面的认证信息,使之与你的集群中实际使用的令牌和 CA 证书匹配
nodeRegistration:
kubeletExtraArgs:
node-ip: 10.100.0.4,fd00:1:2:3::4
JoinConfiguration.controlPlane 中的 advertiseAddress
设定 API 服务器将公告自身要监听的 IP 地址。advertiseAddress
的取值与 kubeadm join
的标志 --apiserver-advertise-address
的取值相同。
kubeadm join --config=kubeadm-config.yaml
创建单协议栈集群
Note:
双协议栈支持并不意味着你需要使用双协议栈来寻址。 你可以部署一个启用了双协议栈联网特性的单协议栈集群。
为了更便于理解,参看下面的名为 kubeadm-config.yaml
的 kubeadm 配置文件示例, 该文件用于单协议栈控制面节点。
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/16