kubeadm 雙棧支援

特性狀態: Kubernetes v1.23 [stable]

你的 Kubernetes 叢集包含雙棧網路,這意味著叢集網路允許你使用任一地址族。在一個叢集中,控制平面可以為單個PodService 分配 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 和 Service 的數量。

建立雙棧叢集

要使用 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 雙棧

將節點加入雙棧叢集

在加入節點之前,請確保節點具有 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

下一步

最後修改於 2024 年 10 月 28 日下午 1:01 PST:更新如何在重啟後持久啟用 IPv6 轉發 (85e4a6c251)