From 70842f2c72f5bb05fdeeed81220eb7df0c1bfc34 Mon Sep 17 00:00:00 2001 From: howieyuen Date: Wed, 20 Jan 2021 10:28:13 +0800 Subject: [PATCH] resync content/zh/docs/tasks/network/validate-dual-stack.md --- .../docs/tasks/network/validate-dual-stack.md | 136 ++++++++++++++---- 1 file changed, 111 insertions(+), 25 deletions(-) diff --git a/content/zh/docs/tasks/network/validate-dual-stack.md b/content/zh/docs/tasks/network/validate-dual-stack.md index bdef90aa1b..f738353f2b 100644 --- a/content/zh/docs/tasks/network/validate-dual-stack.md +++ b/content/zh/docs/tasks/network/validate-dual-stack.md @@ -1,5 +1,6 @@ --- title: 验证 IPv4/IPv6 双协议栈 +min-kubernetes-server-version: v1.20 content_type: task --- ## 验证服务 -在不设置 `ipFamily` 字段的情况下创建以下服务。 -如果未设置此字段,则服务会通过 kube-controller-manager 上的 -`--service-cluster-ip-range` 标志从第一个配置的范围中获取 IP。 +创建以下未显式定义 `.spec.ipFamilyPolicy` 的 Service。 +Kubernetes 将从首个配置的 `service-cluster-ip-range` 给 Service 分配集群 IP, +并将 `.spec.ipFamilyPolicy` 设置为 `SingleStack`。 {{< codenew file="service/networking/dual-stack-default-svc.yaml" >}} - -通过查看该服务的 YAML ,你可以观察到该服务的 `ipFamily` 字段已被设置。 -其取值反映的是通过 kube-controller-manager 的 `--service-cluster-ip-range` -标志所设置的第一个地址范围的地址族。 +使用 `kubectl` 查看 Service 的 YAML 定义。 ```shell kubectl get svc my-service -o yaml ``` + +该 Service 通过在 kube-controller-manager 的 `--service-cluster-ip-range` +标志设置的第一个配置范围,将 `.spec.ipFamilyPolicy` 设置为 `SingleStack`, +将 `.spec.clusterIP` 设置为 IPv4 地址。 + ```yaml apiVersion: v1 kind: Service metadata: - creationTimestamp: "2019-09-03T20:45:13Z" - labels: - app: MyApp name: my-service namespace: default - resourceVersion: "485836" - selfLink: /api/v1/namespaces/default/services/my-service - uid: b6fa83ef-fe7e-47a3-96a1-ac212fa5b030 spec: - clusterIP: 10.0.29.179 - ipFamily: IPv4 + clusterIP: 10.0.217.164 + clusterIPs: + - 10.0.217.164 + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack ports: - port: 80 protocol: TCP @@ -199,25 +203,107 @@ status: ``` -在 `ipFamily` 字段设置为 `IPv6` 的情况下创建一下服务。 +创建以下显示定义 `.spec.ipFamilies` 数组中的第一个元素为 IPv6 的 Service。 +Kubernetes 将 `service-cluster-ip-range` 配置的 IPv6 地址范围给 Service 分配集群 IP, +并将 `.spec.ipFamilyPolicy` 设置为 `SingleStack`。 {{< codenew file="service/networking/dual-stack-ipv6-svc.yaml" >}} - -验证服务是否是 IPv6 地址块获取集群 IP 地址。 -然后,你可以通过 IP 和端口验证对服务的访问。 +使用 `kubectl` 查看 Service 的 YAML 定义。 + +```shell +kubectl get svc my-service -o yaml +``` + + +该 Service 通过在 kube-controller-manager 的 `--service-cluster-ip-range` +标志设置的 IPv6 地址范围,将 `.spec.ipFamilyPolicy` 设置为 `SingleStack`, +将 `.spec.clusterIP` 设置为 IPv6 地址。 + +```yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app: MyApp + name: my-service +spec: + clusterIP: fd00::5118 + clusterIPs: + - fd00::5118 + ipFamilies: + - IPv6 + ipFamilyPolicy: SingleStack + ports: + - port: 80 + protocol: TCP + targetPort: 80 + selector: + app: MyApp + sessionAffinity: None + type: ClusterIP +status: + loadBalancer: {} +``` + + +创建以下显式定义 `.spec.ipFamilyPolicy` 为 `PreferDualStack` 的 Service。 +Kubernetes 将分配 IPv4 和 IPv6 地址(因为该集群启用了双栈), +并根据 `.spec.ipFamilies` 数组中第一个元素的地址族, +从 `.spec.ClusterIPs` 列表中选择 `.spec.ClusterIP`。 + +{{< codenew file="service/networking/dual-stack-preferred-svc.yaml" >}} + +{{< note >}} + +`kubectl get svc` 命令将仅在 `CLUSTER-IP` 字段中显示主 IP。 ```shell kubectl get svc -l app=MyApp -``` -``` + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service ClusterIP fe80:20d::d06b 80/TCP 9s ``` +{{< /note >}} + + +使用 `kubectl describe` 验证服务是否从 IPv4 和 IPv6 地址块中获取了集群 IP。 +然后你就可以通过 IP 和端口,验证对服务的访问。 + +```shell +kubectl describe svc -l app=MyApp +``` + +``` +Name: my-service +Namespace: default +Labels: app=MyApp +Annotations: +Selector: app=MyApp +Type: ClusterIP +IP Family Policy: PreferDualStack +IP Families: IPv4,IPv6 +IP: 10.0.216.242 +IPs: 10.0.216.242,fd00::af55 +Port: 80/TCP +TargetPort: 9376/TCP +Endpoints: +Session Affinity: None +Events: +```