From c939f8150d81f456973b483bf027199881979ff7 Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Mon, 3 Jan 2022 18:00:19 +0800 Subject: [PATCH] [zh] Translate dual-stack-support page --- .../tools/kubeadm/dual-stack-support.md | 243 ++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 content/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support.md diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support.md b/content/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support.md new file mode 100644 index 0000000000..38ec9a1dd7 --- /dev/null +++ b/content/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support.md @@ -0,0 +1,243 @@ +--- +title: 使用 kubeadm 支持双协议栈 +content_type: task +weight: 110 +min-kubernetes-server-version: 1.21 +--- + + + + + +{{< feature-state for_k8s_version="v1.23" state="stable" >}} + + +你的集群包含[双协议栈](/zh/docs/concepts/services-networking/dual-stack/)组网支持, +这意味着集群网络允许你在两种地址族间任选其一。在集群中,控制面可以为同一个 +{{< glossary_tooltip text="Pod" term_id="pod" >}} 或者 {{< glossary_tooltip text="Service" term_id="service" >}} +同时赋予 IPv4 和 IPv6 地址。 + + + +## {{% heading "prerequisites" %}} + + +你需要已经遵从[安装 kubeadm](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/) +中所给的步骤安装了 {{< glossary_tooltip text="kubeadm" term_id="kubeadm" >}} 工具。 + + +针对你要作为{{< glossary_tooltip text="节点" term_id="node" >}}使用的每台服务器, +确保其允许 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”)。 +{{< /note >}} + + +### 创建双协议栈集群 {#create-a-dual-stack-cluster} + +要使用 `kubeadm init` 创建一个双协议栈集群,你可以传递与下面的例子类似的命令行参数: + +```shell +# 这里的地址范围仅作示例使用 +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 +[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/), +该文件用于双协议栈控制面的主控制节点。 + +```yaml +--- +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 来实例化双协议栈控制面节点: + +```shell +kubeadm init --config=kubeadm-config.yaml +``` + + +kube-controller-manager 标志 `--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6` +是使用默认值来设置的。参见[配置 IPv4/IPv6 双协议栈](/zh/docs/concepts/services-networking/dual-stack#configure-ipv4-ipv6-dual-stack)。 + +{{< note >}} + +标志 `--apiserver-advertise-address` 不支持双协议栈。 +{{< /note >}} + + +### 向双协议栈集群添加节点 {#join-a-node-to-dual-stack-cluster} + +在添加节点之前,请确保该节点具有 IPv6 可路由的网络接口并且启用了 IPv6 转发。 + +下面的名为 `kubeadm-config.yaml` 的 kubeadm +[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/) +示例用于向集群中添加工作节点。 + +```yaml +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 +[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/) +示例用于向集群中添加另一个控制面节点。 + +```yaml +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` 的取值相同。 + +```shell +kubeadm join --config=kubeadm-config.yaml +``` + + +### 创建单协议栈集群 {#create-a-single-stack-cluster} + +{{< note >}} + +双协议栈支持并不意味着你需要使用双协议栈来寻址。 +你可以部署一个启用了双协议栈联网特性的单协议栈集群。 +{{< /note >}} + + +为了更便于理解,参看下面的名为 `kubeadm-config.yaml` 的 kubeadm +[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/)示例, +该文件用于单协议栈控制面节点。 + + +```yaml +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration +networking: + podSubnet: 10.244.0.0/16 + serviceSubnet: 10.96.0.0/16 +``` + +## {{% heading "whatsnext" %}} + + +* [验证 IPv4/IPv6 双协议栈](/zh/docs/tasks/network/validate-dual-stack)联网 +* 阅读[双协议栈](/zh/docs/concepts/services-networking/dual-stack/)集群网络 +* 进一步了解 kubeadm [配置格式](/docs/reference/config-api/kubeadm-config.v1beta3/) +