使用 kubeadm 支持双协议栈

    你的集群包含双协议栈组网支持, 这意味着集群网络允许你在两种地址族间任选其一。在集群中,控制面可以为同一个 或者 Service 同时赋予 IPv4 和 IPv6 地址。

    你需要已经遵从安装 kubeadm 中所给的步骤安装了 工具。

    针对你要作为节点使用的每台服务器, 确保其允许 IPv6 转发。在 Linux 节点上,你可以通过以 root 用户在每台服务器上运行 sysctl -w net.ipv6.conf.all.forwarding=1 来完成设置。

    你需要一个可以使用的 IPv4 和 IPv6 地址范围。集群操作人员通常为 IPv4 使用 私有地址范围。对于 IPv6,集群操作人员通常会基于分配给该操作人员的地址范围, 从 2000::/3 中选择一个全局的单播地址块。你不需要将集群的 IP 地址范围路由 到公众互联网。

    说明:

    如果你在使用 kubeadm upgrade 命令升级现有的集群,kubeadm 不允许更改 Pod 的 IP 地址范围(“集群 CIDR”),也不允许更改集群的服务地址范围(“Service CIDR”)。

    为了更便于理解,参看下面的名为 kubeadm-config.yaml 的 kubeadm 配置文件, 该文件用于双协议栈控制面的主控制节点。

    1. ---
    2. apiVersion: kubeadm.k8s.io/v1beta3
    3. kind: ClusterConfiguration
    4. networking:
    5. podSubnet: 10.244.0.0/16,2001:db8:42:0::/56
    6. serviceSubnet: 10.96.0.0/16,2001:db8:42:1::/112
    7. apiVersion: kubeadm.k8s.io/v1beta3
    8. kind: InitConfiguration
    9. advertiseAddress: "10.100.0.1"
    10. bindPort: 6443
    11. nodeRegistration:
    12. kubeletExtraArgs:
    13. node-ip: 10.100.0.2,fd00:1:2:3::2

    InitConfiguration 中的 advertiseAddress 给出 API 服务器将公告自身要监听的 IP 地址。advertiseAddress 的取值与 kubeadm init 的标志 --apiserver-advertise-address 的取值相同。

    运行 kubeadm 来实例化双协议栈控制面节点:

    kube-controller-manager 标志 --node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6 是使用默认值来设置的。参见。

    说明:

    标志 --apiserver-advertise-address 不支持双协议栈。

    下面的名为 kubeadm-config.yaml 的 kubeadm 示例用于向集群中添加工作节点。

    1. apiVersion: kubeadm.k8s.io/v1beta3
    2. kind: JoinConfiguration
    3. discovery:
    4. apiServerEndpoint: 10.100.0.1:6443
    5. token: "clvldh.vjjwg16ucnhp94qr"
    6. caCertHashes:
    7. - "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
    8. # 请更改上面的认证信息,使之与你的集群中实际使用的令牌和 CA 证书匹配
    9. nodeRegistration:
    10. kubeletExtraArgs:
    11. node-ip: 10.100.0.3,fd00:1:2:3::3

    下面的名为 kubeadm-config.yaml 的 kubeadm 配置文件 示例用于向集群中添加另一个控制面节点。

    JoinConfiguration.controlPlane 中的 advertiseAddress 设定 API 服务器将公告自身要监听的 IP 地址。advertiseAddress 的取值与 kubeadm join 的标志 --apiserver-advertise-address 的取值相同。

    1. kubeadm join --config=kubeadm-config.yaml

    说明:

    双协议栈支持并不意味着你需要使用双协议栈来寻址。 你可以部署一个启用了双协议栈联网特性的单协议栈集群。

    为了更便于理解,参看下面的名为 kubeadm-config.yaml 的 kubeadm 配置文件示例, 该文件用于单协议栈控制面节点。

    接下来