2.4. 将 MicroShift 集群迁移到 IPv6 双栈网络


您可以通过在 MicroShift 配置文件中设置两个条目,将单堆栈集群转换为支持 IPv4 和 IPv6 地址系列的双栈网络。

  • 配置中的第一个 IP 系列是集群中的主要 IP 堆栈。
  • MicroShift 系统 pod 和服务会在 MicroShift 重启时自动更新。
  • 在集群迁移到双栈网络并重启时,通过重启双栈网络来启用工作负载 pod 和服务。
重要

OVN-Kubernetes 网络插件要求 IPv4 和 IPv6 默认路由位于同一个网络设备中。不支持独立网络设备上的 IPv4 和 IPv6 默认路由。

重要

当使用需要 IPv6 的双栈网络时,您无法使用 IPv4 映射 IPv6 地址,如 ::FFFF:198.51.100.1

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 有对集群的 root 访问权限。
  • 集群使用 OVN-Kubernetes 网络插件。
  • 主机同时具有 IPv4 和 IPv6 地址和路由,包括每个地址的默认地址。
  • 主机至少有两个 L3 网络,即 IPv4 和 IPv6。

流程

  1. 如果您还没有这样做,请在 /etc/microshift/ 目录中生成提供的 config.yaml.default 文件的副本,将它重命名为 config.yaml
  2. 将新的 MicroShift config.yaml 保留在 /etc/microshift/ 目录中。MicroShift 服务每次启动时都会读取 config.yaml 文件。

    注意

    创建后,config.yaml 文件优先于内置设置。

  3. 使用您的有效值在 MicroShift YAML 的 network 部分添加 IPv6 配置:

    警告

    您必须在重启和迁移后保留相同的第一个条目。对于任何迁移而言,这是正确的:单到双堆栈或双到单一堆栈。如果需要更改第一个条目,则需要完全擦除 etcd 数据库。这可能会导致应用程序数据丢失且不受支持。

    1. 使用您的有效值,在 MicroShift YAML 的 network 部分为第二个网络添加 IPv6 配置。
    2. 将网络分配添加到 MicroShift config.yamlnetwork 部分,以启用将 IPv6 作为二级网络的双堆栈。

      带有网络分配的双栈 IPv6 配置示例

      # ...
      apiServer:
        subjectAltNames:
        - 192.168.113.117
        - 2001:db9:ca7:ff::1db8 1
      network:
        clusterNetwork:
        - 10.42.0.0/16 2
        - fd01::/48 3
        serviceNetwork:
        - 10.43.0.0/16
        - fd02::/112 4
      node:
        nodeIP: 192.168.113.117 5
        nodeIPv6: 2001:db9:ca7:ff::1db8 6
      # ...

      1
      IPv6 节点地址。
      2
      IPv4 网络。使用小于 24 的 CIDR 值指定 clusterNetwork
      3
      IPv6 网络。使用小于 64 的 CIDR 值指定 clusterNetwork
      4
      指定一个带有 112 前缀的 IPv6 CIDR。Kubernetes 仅使用最低 16 位。对于前缀 112,IP 地址从 112 分配给 128 位。
      5
      示例节点 IP 地址。维护前面的 IPv4 IP 地址。
      6
      示例节点 IP 地址。必须是 IPv6 地址系列。
  4. 运行以下命令完成任何其他配置,然后重启 MicroShift:

    $ sudo systemctl restart microshift
  5. 根据需要重置应用 pod 和服务的 IP 系列策略,然后重新启动这些应用 pod 和服务,以启用双栈网络。如需简单示例,请参阅"为应用程序 pod 和服务重置 IP 系列策略"。

验证

您可以按照以下步骤验证所有系统服务和 pod 是否具有两个 IP 地址,每个系列一个:

  1. 运行以下命令,检索 pod 的状态:

    $ oc get pod -A -o wide

    输出示例

    NAMESPACE                  NAME                                      READY   STATUS    RESTARTS        AGE     IP                NODE           NOMINATED NODE   READINESS GATES
    kube-system                csi-snapshot-controller-bb7cb654b-7s5ql   1/1     Running   0               46m     10.42.0.6         microshift-9   <none>           <none>
    kube-system                csi-snapshot-webhook-95f475949-jrqv8      1/1     Running   0               46m     10.42.0.4         microshift-9   <none>           <none>
    openshift-dns              dns-default-zxkqn                         2/2     Running   0               46m     10.42.0.5         microshift-9   <none>           <none>
    openshift-dns              node-resolver-r2h5z                       1/1     Running   0               46m     192.168.113.117   microshift-9   <none>           <none>
    openshift-ingress          router-default-5b75594b4-228z7            1/1     Running   0               2m5s    10.42.0.3         microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-master-bltk7                      4/4     Running   2 (2m32s ago)   2m36s   192.168.113.117   microshift-9   <none>           <none>
    openshift-ovn-kubernetes   ovnkube-node-9ghgs                        1/1     Running   2 (2m32s ago)   46m     192.168.113.117   microshift-9   <none>           <none>
    openshift-service-ca       service-ca-5d7bd9db6-qgwgw                1/1     Running   0               46m     10.42.0.7         microshift-9   <none>           <none>
    openshift-storage          lvms-operator-656cd9b59b-8rpf4            1/1     Running   0               46m     10.42.0.8         microshift-9   <none>           <none>
    openshift-storage          vg-manager-wqmh4                          1/1     Running   2 (2m39s ago)   46m     10.42.0.10        microshift-9   <none>           <none>

  2. 运行以下命令,检索 OVN-K 网络插件定义的网络:

    $ oc get pod -n openshift-ovn-kubernetes ovnkube-master-bltk7 -o jsonpath='{.status.podIPs}'

    输出示例

    [{"ip":"192.168.113.117"},{"ip":"2001:db9:ca7:ff::1db8"}]

  3. 运行以下命令,检索节点资源中定义的网络:

    $ oc get pod -n openshift-ingress router-default-5b75594b4-228z7 -o jsonpath='{.status.podIPs}'

    输出示例

    [{"ip":"10.42.0.3"},{"ip":"fd01:0:0:1::3"}]

注意

要返回单堆栈网络,您可以删除第二个条目到网络,并返回到在迁移到双栈网络之前配置的单个堆栈。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.