Skip to content

Commit

Permalink
[zh-cn] sync services-networking/dual-stack.md
Browse files Browse the repository at this point in the history
Signed-off-by: xin.li <xin.li@daocloud.io>
  • Loading branch information
my-git9 committed Jan 25, 2024
1 parent 3b2ef2b commit 6fc602d
Showing 1 changed file with 61 additions and 71 deletions.
132 changes: 61 additions & 71 deletions content/zh-cn/docs/concepts/services-networking/dual-stack.md
Expand Up @@ -66,8 +66,8 @@ Kubernetes 集群的 IPv4/IPv6 双协议栈可提供下面的功能:
* IPv4 and IPv6 enabled Services
* Pod off-cluster egress routing (eg. the Internet) via both IPv4 and IPv6 interfaces
-->
* 双协议栈 pod 网络 (每个 pod 分配一个 IPv4 和 IPv6 地址)
* IPv4 和 IPv6 启用的服务
* 双协议栈 Pod 网络每个 Pod 分配一个 IPv4 和 IPv6 地址
* IPv4 和 IPv6 启用的 Service
* Pod 的集群外出口通过 IPv4 和 IPv6 路由

<!--
Expand All @@ -90,11 +90,11 @@ The following prerequisites are needed in order to utilize IPv4/IPv6 dual-stack
* A [network plugin](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) that
supports dual-stack networking.
-->
* Kubernetes 1.20 版本或更高版本,有关更早 Kubernetes 版本的使用双栈服务的信息
* Kubernetes 1.20 版本或更高版本,有关更早 Kubernetes 版本的使用双栈 Service 的信息
请参考对应版本的 Kubernetes 文档。
* 提供商支持双协议栈网络(云提供商或其他提供商必须能够为 Kubernetes
节点提供可路由的 IPv4/IPv6 网络接口)
* 支持双协议栈的[网络插件](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)
节点提供可路由的 IPv4/IPv6 网络接口)
* 支持双协议栈的[网络插件](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)

<!--
## Configure IPv4/IPv6 dual-stack
Expand All @@ -105,6 +105,7 @@ The following prerequisites are needed in order to utilize IPv4/IPv6 dual-stack
To configure IPv4/IPv6 dual-stack, set dual-stack cluster network assignments:
-->
如果配置 IPv4/IPv6 双栈,请分配双栈集群网络:

<!--
* kube-apiserver:
* `--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>`
Expand All @@ -115,27 +116,27 @@ To configure IPv4/IPv6 dual-stack, set dual-stack cluster network assignments:
* kube-proxy:
* `--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>`
* kubelet:
* when there is no `--cloud-provider` the administrator can pass a comma-separated pair of IP
addresses via `--node-ip` to manually configure dual-stack `.status.addresses` for that Node.
If a Pod runs on that node in HostNetwork mode, the Pod reports these IP addresses in its
`.status.podIPs` field.
All `podIPs` in a node match the IP family preference defined by the `.status.addresses`
field for that Node.
-->
* kube-apiserver:
* `--node-ip=<IPv4 IP>,<IPv6 IP>`
* This option is required for bare metal dual-stack nodes (nodes that do not define a
cloud provider with the `--cloud-provider` flag). If you are using a cloud provider
and choose to override the node IPs chosen by the cloud provider, set the
`--node-ip` option.
* (The legacy built-in cloud providers do not support dual-stack `--node-ip`.)
-->
* kube-apiserver
* `--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>`
* kube-controller-manager:
* kube-controller-manager
* `--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>`
* `--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>`
* `--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6` 对于 IPv4 默认为 /24,
对于 IPv6 默认为 /64
* kube-proxy:
* kube-proxy
* `--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>`
* kubelet:
* 当没有 `--cloud-provider` 时,管理员可以通过 `--node-ip` 来传递逗号分隔的 IP 地址,
为该节点手动配置双栈 `.status.addresses`
如果 Pod 以 HostNetwork 模式在该节点上运行,则 Pod 会用 `.status.podIPs` 字段来报告它的 IP 地址
一个节点中的所有 `podIP` 都会匹配该节点的由 `.status.addresses` 字段定义的 IP 组。
* kubelet
* `--node-ip=<IPv4 IP>,<IPv6 IP>`
* 裸机双栈节点(未使用 `--cloud-provider` 标志定义云平台的节点)需要此选项
如果你使用了某个云平台并选择覆盖云平台所选择的节点 IP,请设置 `--node-ip` 选项
* (传统的内置云平台实现不支持双栈 `--node-ip`。)

{{< note >}}
<!--
Expand All @@ -152,20 +153,10 @@ IPv6 CIDR 的一个例子:`fdXY:IJKL:MNOP:15::/64`

{{< feature-state for_k8s_version="v1.27" state="alpha" >}}

<!--
When using an external cloud provider, you can pass a dual-stack `--node-ip` value to
kubelet if you enable the `CloudDualStackNodeIPs` feature gate in both kubelet and the
external cloud provider. This is only supported for cloud providers that support dual
stack clusters.
-->
使用外部云驱动时,如果你在 kubelet 和外部云提供商中都启用了
`CloudDualStackNodeIPs` 特性门控,则可以将双栈 `--node-ip`
值传递给 kubelet。此特性需要保证云提供商支持双栈集群。

<!--
## Services
-->
## 服务 {#services}
## Service {#services}

<!--
You can create {{< glossary_tooltip text="Services" term_id="service" >}} which can use IPv4, IPv6, or both.
Expand All @@ -179,10 +170,10 @@ set the `.spec.ipFamilyPolicy` field to one of the following values:
你可以使用 IPv4 或 IPv6 地址来创建
{{< glossary_tooltip text="Service" term_id="service" >}}。

服务的地址族默认为第一个服务集群 IP 范围的地址族(通过 kube-apiserver 的
Service 的地址族默认为第一个服务集群 IP 范围的地址族(通过 kube-apiserver 的
`--service-cluster-ip-range` 参数配置)。

当你定义服务时,可以选择将其配置为双栈。若要指定所需的行为,你可以设置
当你定义 Service 时,可以选择将其配置为双栈。若要指定所需的行为,你可以设置
`.spec.ipFamilyPolicy` 字段为以下值之一:

<!--
Expand All @@ -194,10 +185,10 @@ set the `.spec.ipFamilyPolicy` field to one of the following values:
* Selects the `.spec.ClusterIP` from the list of `.spec.ClusterIPs` based on the address family
of the first element in the `.spec.ipFamilies` array.
-->
* `SingleStack`单栈服务。控制面使用第一个配置的服务集群 IP 范围为服务分配集群 IP。
* `SingleStack`单栈 Service。控制面使用第一个配置的服务集群 IP 范围为 Service 分配集群 IP。
* `PreferDualStack`
* 为服务分配 IPv4 和 IPv6 集群 IP 地址。
* `RequireDualStack`:从 IPv4 和 IPv6 的地址范围分配服务的 `.spec.ClusterIPs`
* 为 Service 分配 IPv4 和 IPv6 集群 IP 地址。
* `RequireDualStack`:从 IPv4 和 IPv6 的地址范围分配 Service 的 `.spec.ClusterIPs`
* 从基于在 `.spec.ipFamilies` 数组中第一个元素的地址族的 `.spec.ClusterIPs`
列表中选择 `.spec.ClusterIP`

Expand All @@ -207,15 +198,15 @@ families for dual-stack, you can choose the address families by setting an optio
`.spec.ipFamilies`, on the Service.
-->
如果你想要定义哪个 IP 族用于单栈或定义双栈 IP 族的顺序,可以通过设置
服务上的可选字段 `.spec.ipFamilies` 来选择地址族。
Service 上的可选字段 `.spec.ipFamilies` 来选择地址族。

{{< note >}}
<!--
The `.spec.ipFamilies` field is conditionally mutable: you can add or remove a secondary
IP address family, but you cannot change the primary IP address family of an existing Service.
-->
`.spec.ipFamilies` 字段修改是有条件的:你可以添加或删除第二个 IP 地址族,
但你不能更改现有服务的主要 IP 地址族。
但你不能更改现有 Service 的主要 IP 地址族。
{{< /note >}}

<!--
Expand Down Expand Up @@ -244,14 +235,14 @@ The first family you list is used for the legacy `.spec.ClusterIP` field.
These examples demonstrate the behavior of various dual-stack Service configuration scenarios.
-->
### 双栈服务配置场景 {#dual-stack-service-configuration-scenarios}
### 双栈 Service 配置场景 {#dual-stack-service-configuration-scenarios}

以下示例演示多种双栈服务配置场景下的行为
以下示例演示多种双栈 Service 配置场景下的行为

<!--
#### Dual-stack options on new Services
-->
#### 新服务的双栈选项 {#dual-stack-options-on-new-services}
#### 新 Service 的双栈选项 {#dual-stack-options-on-new-services}

<!--
1. This Service specification does not explicitly define `.spec.ipFamilyPolicy`. When you create
Expand All @@ -261,12 +252,11 @@ These examples demonstrate the behavior of various dual-stack Service configurat
[headless Services](/docs/concepts/services-networking/service/#headless-services) with selectors
will behave in this same way.)
-->
1. 此服务规约中没有显式设定 `.spec.ipFamilyPolicy`当你创建此服务时,Kubernetes
从所配置的第一个 `service-cluster-ip-range` 中为服务分配一个集群 IP,并设置
1. 此 Service 规约中没有显式设定 `.spec.ipFamilyPolicy`当你创建此 Service 时,Kubernetes
从所配置的第一个 `service-cluster-ip-range` 中为 Service 分配一个集群 IP,并设置
`.spec.ipFamilyPolicy``SingleStack`
[无选择算符的服务](/zh-cn/docs/concepts/services-networking/service/#services-without-selectors)
[无头服务](/zh-cn/docs/concepts/services-networking/service/#headless-services)的行为方式
与此相同。)
[无选择算符的 Service](/zh-cn/docs/concepts/services-networking/service/#services-without-selectors)
[无头服务(Headless Service)](/zh-cn/docs/concepts/services-networking/service/#headless-services)的行为方式与此相同。)

{{% code_sample file="service/networking/dual-stack-default-svc.yaml" %}}

Expand All @@ -285,14 +275,14 @@ These examples demonstrate the behavior of various dual-stack Service configurat
* On a cluster with dual-stack enabled, specifying `RequireDualStack` in `.spec.ipFamilyPolicy`
behaves the same as `PreferDualStack`.
-->
2. 此服务规约显式地将 `.spec.ipFamilyPolicy` 设置为 `PreferDualStack`
当你在双栈集群上创建此服务时,Kubernetes 会为该服务分配 IPv4 和 IPv6 地址。
控制平面更新服务的 `.spec` 以记录 IP 地址分配。
2. 此 Service 规约显式地将 `.spec.ipFamilyPolicy` 设置为 `PreferDualStack`
当你在双栈集群上创建此 Service 时,Kubernetes 会为此 Service 分配 IPv4 和 IPv6 地址。
控制平面更新 Service 的 `.spec` 以记录 IP 地址分配。
字段 `.spec.ClusterIPs` 是主要字段,包含两个分配的 IP 地址;`.spec.ClusterIP` 是次要字段,
其取值从 `.spec.ClusterIPs` 计算而来。

* 对于 `.spec.ClusterIP` 字段,控制面记录来自第一个服务集群 IP 范围
对应的地址族的 IP 地址。
* 对于 `.spec.ClusterIP` 字段,控制面记录来自第一个服务集群 IP
范围对应的地址族的 IP 地址。
* 对于单协议栈的集群,`.spec.ClusterIPs``.spec.ClusterIP` 字段都
仅仅列出一个地址。
* 对于启用了双协议栈的集群,将 `.spec.ipFamilyPolicy` 设置为
Expand All @@ -306,8 +296,8 @@ These examples demonstrate the behavior of various dual-stack Service configurat
IPv4 address in `.spec.ClusterIPs`, `.spec.ClusterIP` is set to the IPv6 address because that is
the first element in the `.spec.ClusterIPs` array, overriding the default.
-->
3. 下面的服务规约显式地在 `.spec.ipFamilies` 中指定 `IPv6``IPv4`
`.spec.ipFamilyPolicy` 设定为 `PreferDualStack`
3. 下面的 Service 规约显式地在 `.spec.ipFamilies` 中指定 `IPv6``IPv4`并将
`.spec.ipFamilyPolicy` 设定为 `PreferDualStack`
当 Kubernetes 为 `.spec.ClusterIPs` 分配一个 IPv6 和一个 IPv4 地址时,
`.spec.ClusterIP` 被设置成 IPv6 地址,因为它是 `.spec.ClusterIPs` 数组中的第一个元素,
覆盖其默认值。
Expand All @@ -317,14 +307,14 @@ These examples demonstrate the behavior of various dual-stack Service configurat
<!--
#### Dual-stack defaults on existing Services
-->
#### 现有服务的双栈默认值 {#dual-stack-defaults-on-existing-services}
#### 现有 Service 的双栈默认值 {#dual-stack-defaults-on-existing-services}

<!--
These examples demonstrate the default behavior when dual-stack is newly enabled on a cluster
where Services already exist. (Upgrading an existing cluster to 1.21 or beyond will enable
dual-stack.)
-->
下面示例演示了在服务已经存在的集群上新启用双栈时的默认行为
下面示例演示了在 Service 已经存在的集群上新启用双栈时的默认行为
(将现有集群升级到 1.21 或者更高版本会启用双协议栈支持。)

<!--
Expand All @@ -333,16 +323,16 @@ dual-stack.)
`.spec.ipFamilies` to the address family of the existing Service. The existing Service cluster IP
will be stored in `.spec.ClusterIPs`.
-->
1. 在集群上启用双栈时,控制面会将现有服务(无论是 `IPv4` 还是 `IPv6`)配置
1. 在集群上启用双栈时,控制面会将现有 Service(无论是 `IPv4` 还是 `IPv6`)配置
`.spec.ipFamilyPolicy``SingleStack` 并设置 `.spec.ipFamilies`
为服务的当前地址族
为 Service 的当前地址族

{{% code_sample file="service/networking/dual-stack-default-svc.yaml" %}}

<!--
You can validate this behavior by using kubectl to inspect an existing service.
-->
你可以通过使用 kubectl 检查现有服务来验证此行为
你可以通过使用 kubectl 检查现有 Service 来验证此行为

```shell
kubectl get svc my-service -o yaml
Expand Down Expand Up @@ -423,12 +413,12 @@ dual-stack.)
<!--
#### Switching Services between single-stack and dual-stack
-->
#### 在单栈和双栈之间切换服务 {#switching-services-between-single-stack-and-dual-stack}
#### 在单栈和双栈之间切换 Service {#switching-services-between-single-stack-and-dual-stack}

<!--
Services can be changed from single-stack to dual-stack and from dual-stack to single-stack.
-->
服务可以从单栈更改为双栈,也可以从双栈更改为单栈。
Service 可以从单栈更改为双栈,也可以从双栈更改为单栈。

<!--
1. To change a Service from single-stack to dual-stack, change `.spec.ipFamilyPolicy` from
Expand All @@ -438,11 +428,11 @@ Services can be changed from single-stack to dual-stack and from dual-stack to s
Edit the Service specification updating the `.spec.ipFamilyPolicy` from `SingleStack` to `PreferDualStack`.
-->
1. 要将服务从单栈更改为双栈,根据需要将 `.spec.ipFamilyPolicy``SingleStack` 改为
1. 要将 Service 从单栈更改为双栈,根据需要将 `.spec.ipFamilyPolicy``SingleStack` 改为
`PreferDualStack``RequireDualStack`
当你将此服务从单栈更改为双栈时,Kubernetes 将分配缺失的地址族,
以便现在该服务具有 IPv4 和 IPv6 地址。
编辑服务规约将 `.spec.ipFamilyPolicy``SingleStack` 改为 `PreferDualStack`
当你将此 Service 从单栈更改为双栈时,Kubernetes 将分配缺失的地址族,
以便现在此 Service具有 IPv4 和 IPv6 地址。
编辑 Service 规约将 `.spec.ipFamilyPolicy``SingleStack` 改为 `PreferDualStack`

<!--
Before:
Expand Down Expand Up @@ -471,9 +461,9 @@ Services can be changed from single-stack to dual-stack and from dual-stack to s
array, and sets `.spec.ClusterIP` to that IP address and sets `.spec.ipFamilies` to the address
family of `.spec.ClusterIPs`.
-->
2. 要将服务从双栈更改为单栈,请将 `.spec.ipFamilyPolicy``PreferDualStack`
2. 要将 Service 从双栈更改为单栈,请将 `.spec.ipFamilyPolicy``PreferDualStack`
`RequireDualStack` 改为 `SingleStack`
当你将此服务从双栈更改为单栈时,Kubernetes 只保留 `.spec.ClusterIPs`
当你将此 Service 从双栈更改为单栈时,Kubernetes 只保留 `.spec.ClusterIPs`
数组中的第一个元素,并设置 `.spec.ClusterIP` 为那个 IP 地址,
并设置 `.spec.ipFamilies``.spec.ClusterIPs` 地址族。

Expand All @@ -494,15 +484,15 @@ and without `.spec.ipFamilyPolicy` explicitly set, the `.spec.ipFamilyPolicy` fi
<!--
### Service type LoadBalancer
-->
### LoadBalancer 类型服务 {#service-type-loadbalancer}
### LoadBalancer 类型 Service {#service-type-loadbalancer}

<!--
To provision a dual-stack load balancer for your Service:
* Set the `.spec.type` field to `LoadBalancer`
* Set `.spec.ipFamilyPolicy` field to `PreferDualStack` or `RequireDualStack`
-->
要为你的服务提供双栈负载均衡器
要为你的 Service 提供双栈负载均衡器

*`.spec.type` 字段设置为 `LoadBalancer`
*`.spec.ipFamilyPolicy` 字段设置为 `PreferDualStack` 或者 `RequireDualStack`
Expand All @@ -512,7 +502,7 @@ To provision a dual-stack load balancer for your Service:
To use a dual-stack `LoadBalancer` type Service, your cloud provider must support IPv4 and IPv6
load balancers.
-->
为了使用双栈的负载均衡器类型服务,你的云驱动必须支持 IPv4 和 IPv6 的负载均衡器。
为了使用双栈的负载均衡器类型 Service,你的云驱动必须支持 IPv4 和 IPv6 的负载均衡器。
{{< /note >}}

<!--
Expand Down Expand Up @@ -552,15 +542,15 @@ You can use IPv4/IPv6 dual-stack networking with `l2bridge` networks.
## Windows 支持 {#windows-support}

Windows 上的 Kubernetes 不支持单栈“仅 IPv6” 网络。 然而,
对于 Pod 和节点而言,仅支持单栈形式服务的双栈 IPv4/IPv6 网络是被支持的。
对于 Pod 和节点而言,仅支持单栈形式 Service 的双栈 IPv4/IPv6 网络是被支持的。

你可以使用 `l2bridge` 网络来实现 IPv4/IPv6 双栈联网。

{{< note >}}
<!--
Overlay (VXLAN) networks on Windows **do not** support dual-stack networking.
-->
Windows 上的 Overlay (VXLAN) 网络****支持双栈网络。
Windows 上的 OverlayVXLAN网络****支持双栈网络。
{{< /note >}}

<!--
Expand Down

0 comments on commit 6fc602d

Please sign in to comment.