在 Satellite 位置和集群中定制网络设置

Satellite Red Hat CoreOS

您可以使用若干功能来定制 Satellite 网络设置,以更好地隔离和分段在您所在位置运行的服务和工作负载。 请查阅以下各节以获取更多信息。

这些自定义功能仅适用于 Red Hat CoreOS-enabled 位置。

根据要应用的网络定制,在创建位置时,创建集群时或设置位置和集群后,可能需要在 CLI 中指定某些选项。 以下标记指示何时应用定制。

  • 在创建位置期间: 必须在创建位置期间从 CLI 应用这些定制。
  • 在集群创建期间: 可以在集群创建期间从 CLI 应用这些定制。
  • 在创建位置和集群之后: 可以在创建位置和集群之后应用这些定制。

创建位置时定义定制子网

创建位置时

在 CLI 中创建位置时,可以定义以下参数以定制位置中的联网。 有关更多信息,请参阅 ibmcloud sat location create 命令参考。

您可以指定 --pod-subnet 选项以指定定制子网 CIDR 来为 pod 提供专用 IP 地址。 只有在您同时启用 Red Hat CoreOS 并使用 --coreos-enabled 标志的情况下,才能使用此选项。 子网必须至少为 /23 或更大。 默认值为 172.16.0.0/16

您还可以指定 --service-subnet 选项,以指定用于为服务提供专用 IP 地址的定制子网 CIDR。 只有在您同时启用 Red Hat CoreOS 并使用 --coreos-enabled 标志的情况下,才能使用此选项。 子网必须至少为 /24 或更大。 默认值为 172.20.0.0/16

创建位置时定义 pod 网络接口

创建位置时

在 CLI 中创建位置时,可以定义 --pod-network-interface 以设置 pod 网络接口。 可用的方法为 can-reachinterface

  • 要直接提供 URL 或 IP 地址,请指定 can-reach=<url>can-reach=<ip_address>。 如果网络接口可以访问所提供的 URL 或 IP 地址,则使用该选项。 例如,使用 can-reach=www.exampleurl.com 指定 URL,使用 can-reach=172.19.0.0 指定 IP 地址。
  • 要选择具有 Regex 字符串的接口,请指定 interface=<regex_string>; 例如,interface=eth.*

有关更多信息,请参阅 ibmcloud sat location create 命令参考。

创建集群时定义 pod 网络接口

创建群集期间

在 CLI 中创建集群时,可以定义 --pod-network-interface 以设置 pod 网络接口。 可用的方法为 can-reachinterface

  • 要直接提供 URL 或 IP 地址,请指定 can-reach=<url>can-reach=<ip_address>。 如果网络接口可以访问所提供的 URL 或 IP 地址,则使用该选项。 例如,使用 can-reach=www.exampleurl.com 指定 URL,使用 can-reach=172.19.0.0 指定 IP 地址。
  • 要选择具有 Regex 字符串的接口,请指定 interface=<regex_string>; 例如,interface=eth.*

有关更多信息,请参阅 ibmcloud oc cluster create satellite 命令参考。

限制对 Satellite 集群的访问

定位和创建群组后

创建位置和集群后,可以使用 ibmcloud ks cluster master satellite-service-endpoint allowlist add 命令将子网添加到 Satellite 集群的服务端点允许列表。 源自该子网的、发往集群主节点的授权请求,可通过 Satellite 服务端点进行处理。 必须 启用 允许列表才能应用限制。

使用 Calico 主机端点创建网络策略

定位和创建群组后

如果在 V 4.12 和更高版本上创建 Satellite 集群,那么会针对每个工作程序节点的网络接口将 Calico Hostendpoint 实例部署到该集群。

您可以使用这些 Hostendpoint 实例在添加到每个 Hostendpoint 实例的 “ibm-cloud.kubernetes.io/interface-name: <network_interface_name>” 标签的帮助下定义全局网络策略。

除此标签外,还会为其他定制选项添加所有工作程序节点的标签。

这些 Hostendpoints 具有 “projectcalico-default-allow" 配置文件,这意味着当您更新到 4.12 时,这些 Hostendpoints 可能会改变先前预期的行为。

在更新到 4.12之前,请确保所有先前期望的网络规则,策略 Hostendpoints 在更新之后也同样工作。

有关更多信息,请参阅 Calico 文档

限制 NodePort 服务访问权

定位和创建群组后

缺省情况下,可以在集群可用的所有网络接口上访问 NodePort 服务,例如 0.0.0.0

但是,在多个网络可供主机使用的 Satellite 位置中,您可以限制服务的可用网络接口。

要限制范围,请在集群级别限制 NodePort 服务的侦听地址。 此限制允许集群管理员通过使用 IP 子网作为允许的侦听地址范围来限制对特定网络接口的访问。 完成以下步骤以重新配置 kube-proxy 组件,从而限制 NodePort 服务的侦听地址范围。

错误配置 node-port-addresses 可能会使您的服务与有效源隔离。 IBM Cloud 不要求访问任何子网来管理群集。

  1. 访问 Red Hat OpenShift 集群

  2. 准备要允许访问 NodePort 服务的计划源子网 CIDR 列表。

  3. 运行以下命令以获取 network.operator.openshift.io 配置并保存副本,以防需要还原更改。

    kubectl get network.operator.openshift.io cluster -o yaml
    
  4. 编辑 network.operator.openshift.io 配置并在 spec 部分下设置子网列表,并包含 NodePort 服务所需的子网。

    spec:
      kubeProxyConfig:
        proxyArguments:
          node-port-addresses:
          - 192.0.2.0/24
          - 198.51.100.0/24
    
  5. 保存更改并将其应用于集群。

    oc apply -f updated-network-config.yaml
    
  6. 对于集群版本 4.10.x 和更低版本,请将集群网络操作员的管理状态设置为 Unmanaged

     oc patch network.operator.openshift.io cluster --type=merge --patch  '{"spec": {"managementState": "Unmanaged"}}'
    
  7. 重启 kube-proxy DaemonSet 以应用更改。 此操作不会造成干扰。

    oc rollout restart ds -n openshift-kube-proxy openshift-kube-proxy
    
  8. 等待所有 kube-proxy Pod 重新启动。 运行以下命令以检查状态。

    oc get po -n openshift-kube-proxy --selector app=kube-proxy
    
  9. 对于 4.10.x 及更低版本的集群版本,将集群网络操作员的管理状态重置为 Managed。 请注意,此操作可能会重新启动代理 pod。

     oc patch network.operator.openshift.io cluster --type=merge --patch  '{"spec": {"managementState": "Managed"}}'
    

重新启动所有 pod 后,将使用受限子网配置集群。 您可以重复这些步骤以根据需要更新或除去子网列表。

您可以通过按服务使用 NetworkPolicies 来进一步限制流量。