kubeadm 雙堆疊支援
Kubernetes v1.23 [穩定]
您的 Kubernetes 叢集包含雙堆疊網路功能,這表示叢集網路可讓您使用任一網址族系。在叢集中,控制平面可以將 IPv4 位址和 IPv6 位址同時指派給單一 Pod 或 服務。
開始之前
您需要安裝 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 組態格式