Kubernetes 使用kubeadm支持双协议栈

2022-06-01 09:02 更新

使用 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


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号