网络


Red Hat build of MicroShift 4.13

配置和管理集群网络

Red Hat OpenShift Documentation Team

摘要

本文档提供有关配置和管理 MicroShift 集群网络的说明,包括 DNS、ingress 和 Pod 网络。

第 1 章 了解网络设置

了解如何将网络自定义和默认设置应用到红帽构建的 MicroShift 部署。每个节点都包含在一个机器和单个红帽构建的 MicroShift 中,因此每个部署都需要单独的配置、Pod 和设置。

集群管理员有几个选项用于公开集群内的应用程序到外部流量并确保网络连接:

  • 服务,如 NodePort
  • API 资源,如 IngressRoute

默认情况下,Kubernetes 为 pod 内运行的应用分配内部 IP 地址。Pod 及其容器之间可以有网络流量,但集群外的客户端无法直接访问容器集,除非通过一个服务(如 NodePort)公开。

注意

要排除 NodePort 服务的连接问题,请阅读发行注记中的已知问题。

1.1. 关于 OVN-Kubernetes 网络插件

OVN-Kubernetes 是红帽构建的 MicroShift 部署的默认网络解决方案。OVN-Kubernetes 是 pod 和基于 Open Virtual Network (OVN) 的服务的虚拟网络。OVN-Kubernetes Container Network Interface (CNI) 插件是集群的网络插件。使用 OVN-Kubernetes 网络插件的集群也会在节点上运行 Open vSwitch (OVS)。OVN 在节点上配置 OVS,以实施声明的网络配置。

1.1.1. 网络拓扑

OVN-Kubernetes 提供基于 overlay 的网络实现。此覆盖包括基于 OVS 的服务和 NetworkPolicy 实施。覆盖网络使用 Geneve (Generic Network Virtualization Encapsulation) 隧道协议。Geneve 隧道的 pod 最大传输单元(MTU)被设置为比主机上的物理接口 MTU 小的值。这个较小的 MTU 为传输前添加到隧道头所需的信息留出空间。

OVS 作为 systemd 服务在 MicroShift 节点的红帽构建上运行。OVS RPM 软件包作为对 microshift-networking RPM 软件包的依赖项安装。安装了 microshift-networking RPM 时,OVS 会立即启动。

红帽构建的 MicroShift 网络拓扑

317 RHbM OVN topology 0323

1.1.1.1. 虚拟化网络的 OVN 逻辑组件描述
OVN 节点交换机

一个名为 <node-name> 的虚拟交换机。OVN 节点交换机根据节点的主机名命名。

  • 在本例中,node-namemicroshift-dev
OVN 集群路由器

名为 ovn_cluster_router 的虚拟路由器,也称为分布式路由器。

  • 在本例中,集群网络是 10.42.0.0/16
OVN join 开关
名为 join 的虚拟交换机。
OVN 网关路由器
名为 GR_<node-name> 的虚拟路由器,也称为外部网关路由器。
OVN 外部交换机
名为 ext_<node-name>. 的虚拟交换机。
1.1.1.2. 网络拓扑图中的连接描述
  • 网络服务设备 enp1s0 和 OVN 外部交换机 ext_microshift-dev 之间的南北流量由网关网桥 br-ex 通过 OVS 跳接端口提供。
  • OVN 网关路由器 GR_microshift-dev 通过逻辑路由器端口 4 连接到外部网络交换机 ext_microshift-dev。端口 4 附加到节点 IP 地址 192.168.122.14。
  • join 交换机 join 将 OVN 网关路由器 GR_microshift-dev 连接到 OVN 集群路由器 ovn_cluster_router。IP 地址范围为 100.62.0.0/16。

    • OVN 网关路由器 GR_microshift-dev 通过逻辑路由器端口 3 连接到 OVN join 交换机。端口 3 与内部 IP 地址 100.64.0.2 连接。
    • OVN 集群路由器 ovn_cluster_router 通过逻辑路由器端口 2 连接到 join 交换机。端口 2 与内部 IP 地址 100.64.0.1 连接。
  • OVN 集群路由器 ovn_cluster_router 通过逻辑路由器端口 1 连接到节点交换机 microshift-dev。端口 1 与 OVN 集群网络 IP 地址 10.42.0.1 附加。
  • pod 和网络服务之间的东西流量由 OVN 集群路由器 ovn_cluster_router 和节点交换机 microshift-dev 提供。IP 地址范围为 10.42.0.0/24。
  • pod 之间的东西流量由节点交换机 microshift-dev 提供,而无需网络地址转换 (NAT)。
  • pod 和外部网络之间的南北流量由 OVN 集群路由器 ovn_cluster_router 和主机网络提供。此路由器通过 ovn-kubernetes 管理端口 ovn-k8s-mp0 连接,IP 地址为 10.42.0.2。
  • 所有 pod 都通过其接口连接到 OVN 节点交换机。

    • 在本例中,Pod 1 和 Pod 2 通过 Interface 1Interface 2 连接到节点交换机。

1.1.2. IP 转发

启动时,ovnkube-master 容器会自动启用主机网络 sysctl net.ipv4.ip_forward 内核参数。这需要将传入的流量转发到 CNI。例如,如果禁用了 ip_forward,则从集群外部访问 NodePort 服务会失败。

1.1.3. 网络性能优化

默认情况下,将三个性能优化应用到 OVS 服务,以最大程度降低资源消耗:

  • ovs-vswitchd.serviceovsdb-server.service 的 CPU 关联性
  • no-mlockallopenvswitch.service
  • 将处理程序和 revalidator 线程限制为 ovs-vswitchd.service

1.1.4. 网络功能

红帽构建的 MicroShift 4.13提供的网络功能包括:

  • Kubernetes 网络策略
  • 动态节点 IP
  • 指定主机接口上的集群网络

红帽构建的 MicroShift 4.13 不提供网络功能:

  • egress IP/firewall/qos: 禁用
  • 混合网络:不支持
  • IPsec: 不支持
  • 硬件卸载:不支持

1.1.5. 红帽构建的 MicroShift 网络组件和服务

本简要概述在红帽构建的 MicroShift 中描述了网络组件及其操作。microshift-networking RPM 是一个软件包,可自动拉取任何与网络相关的依赖项和 systemd 服务来初始化网络,例如 microshift-ovs-init systemd 服务。

NetworkManager
NetworkManager 需要在红帽构建的 MicroShift 节点上设置初始网关网桥。NetworkManager 和 NetworkManager-ovs RPM 软件包作为依赖项安装到 microshift-networking RPM 软件包,该软件包包含必要的配置文件。红帽构建的 MicroShift 中的 NetworkManager 使用 keyfile 插件,并在安装 microshift-networking RPM 软件包后重启。
microshift-ovs-init
microshift-ovs-init.servicemicroshift-networking RPM 软件包安装,作为依赖的 systemd 服务到 microshift.service。它负责设置 OVS 网关网桥。
OVN 容器

两个 OVN-Kubernetes 守护进程集由红帽构建的 MicroShift 渲染和应用。

  • ovnkube-master 包含 northd,nbdb,sbdbovnkube-master 容器。
  • ovnkube-node ovnkube-node 包含 OVN-Controller 容器。

    在红帽构建的 MicroShift 引导后,OVN-Kubernetes 守护进程集会在 openshift-ovn-kubernetes 命名空间中部署。

打包

OVN-Kubernetes 清单和启动逻辑内置在红帽构建的 MicroShift 中。microshift-networking RPM 中包含的 systemd 服务和配置包括:

  • /etc/NetworkManager/conf.d/microshift-nm.conf for NetworkManager.service
  • /etc/systemd/system/ovs-vswitchd.service.d/microshift-cpuaffinity.conf for ovs-vswitchd.service
  • /etc/systemd/system/ovsdb-server.service.d/microshift-cpuaffinity.conf
  • /usr/bin/configure-ovs-microshift.sh 用于 microshift-ovs-init.service
  • /usr/bin/configure-ovs.sh 用于 microshift-ovs-init.service
  • /etc/crio/crio.conf.d/microshift-ovn.conf 用于 CRI-O 服务

1.1.6. 网桥映射

网桥映射允许提供商网络流量访问物理网络。流量离开提供商网络,到达 br-int 网桥。br-intbr-ex 之间的跳接端口允许流量遍历提供商网络和边缘网络。Kubernetes pod 通过虚拟以太网对连接到 br-int 网桥:一个虚拟以太网对端附加到 pod 命名空间,另一个端点连接到 br-int 网桥。

1.1.6.1. 主网关接口

您可以在 ovn.yaml 配置文件中将所需的主机接口名称指定为 gatewayInterface。指定的接口在 OVS 网桥 br-ex 中添加,它充当 CNI 网络的网关桥接。

1.2. 创建 OVN-Kubernetes 配置文件

如果没有创建 OVN-Kubernetes 配置文件,红帽构建的 MicroShift 将使用内置默认 OVN-Kubernetes 值。您可以将 OVN-Kubernetes 配置文件写入 /etc/microshift/ovn.yaml。为您的配置提供了一个示例文件。

流程

  1. 要创建 ovn.yaml 文件,请运行以下命令:

    $ sudo cp /etc/microshift/ovn.yaml.default /etc/microshift/ovn.yaml
    Copy to Clipboard Toggle word wrap
  2. 要列出您创建的配置文件的内容,请运行以下命令:

    $ cat /etc/microshift/ovn.yaml.default
    Copy to Clipboard Toggle word wrap

    带有默认值的 'yaml' 配置文件示例

    ovsInit:
      disableOVSInit: false
      gatewayInterface: "" 
    1
    
    mtu: 1400
    Copy to Clipboard Toggle word wrap

    1
    默认值为空字符串,表示 "not-specified"。CNI 网络插件会自动探测到带有默认路由的接口。
  3. 要自定义配置,请使用列出您可以使用的有效值:

    Expand
    表 1.1. 支持红帽构建的 MicroShift 的可选 OVN-Kubernetes 配置
    字段类型Default(默认)描述示例

    ovsInit.disableOVSInit

    bool

    false

    跳过在 microshift-ovs-init.service中配置 OVS 网桥 br-ex

    true [1]

    ovsInit.gatewayInterface

    Alpha

    eth0

    Ingress,即 API 网关

    eth0

    mtu

    uint32

    auto

    用于 pod 的 MTU 值

    1300

    1. 需要 OVS 网桥。当 disableOVSInit 为 true 时,必须手动配置 OVS 网桥 br-ex

      重要

      如果更改了 ovn.yaml 文件中的 mtu 配置值,您必须重启红帽构建的 MicroShift 运行的主机以应用更新的设置。

自定义 ovn.yaml 配置文件示例

ovsInit:
  disableOVSInit: true
  gatewayInterface: eth0
mtu: 1300
Copy to Clipboard Toggle word wrap

重要

当在 ovn.yaml 配置文件中将 disableOVSInit 设置为 true 时,必须手动配置 br-ex OVS 网桥。

1.3. 重启 ovnkube-master pod

以下流程重启 ovnkube-master pod。

先决条件

  • 已安装 OpenShift CLI (oc)。
  • 使用具有 cluster-admin 角色的用户访问集群。
  • 在使用 OVN-Kubernetes 网络插件配置的基础架构上安装集群。
  • KUBECONFIG 环境变量被设置。

流程

使用以下步骤重启 ovnkube-master pod。

  1. 运行以下命令来访问远程集群:

    $ export KUBECONFIG=$PWD/kubeconfig
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,查找您要重启的 ovnkube-master pod 的名称:

    $ pod=$(oc get pods -n openshift-ovn-kubernetes | awk -F " " '/ovnkube-master/{print $1}')
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令来删除 ovnkube-master pod:

    $ oc -n openshift-ovn-kubernetes delete pod $pod
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令确认新的 ovnkube-master pod 正在运行:

    $ oc get pods -n openshift-ovn-kubernetes
    Copy to Clipboard Toggle word wrap

    正在运行的 Pod 列表显示新的 ovnkube-master pod 名称和年龄。

1.4. 在 HTTP (S) 代理后部署红帽构建的 MicroShift

当您想要向 pod 添加基本匿名和安全措施时,请在 HTTP(S)代理后面部署一个红帽构建的 MicroShift 集群。

在代理后面部署红帽构建的 MicroShift 时,您必须将主机操作系统配置为使用代理与启动 HTTP(S) 请求的所有组件。

所有特定于用户的工作负载或带有出口流量的 pod (如访问云服务)都必须配置为使用代理。红帽构建的 MicroShift 中没有内置透明代理的出口流量。

1.5. 使用 RPM-OStree HTTP (S) 代理

要在 RPM-OStree 中使用 HTTP (S)代理,请为 rpm-ostreed 服务设置 http_proxy 环境变量

流程

  1. 运行以下命令,将此设置添加到 /etc/systemd/system/rpm-ostreed.service.d/00-proxy.conf 文件中:

    Environment="http_proxy=http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"
    Copy to Clipboard Toggle word wrap
  2. 接下来,重新加载配置设置并重新启动服务以应用您的更改。

    1. 运行以下命令来重新载入配置设置:

      $ sudo systemctl daemon-reload
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令重启 rpm-ostree 服务:

      $ sudo systemctl restart rpm-ostreed.service
      Copy to Clipboard Toggle word wrap

1.6. 在 CRI-O 容器运行时中使用代理

要在 CRI-O 中使用 HTTP(S) 代理,您需要设置 HTTP_PROXYHTTPS_PROXY 环境变量。您还可以设置 NO_PROXY 变量,将主机列表排除在代理之外。

流程

  1. /etc/systemd/system/crio.service.d/00-proxy.conf 文件中添加以下设置:

    Environment=NO_PROXY="localhost,127.0.0.1"
    Environment=HTTP_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"
    Environment=HTTPS_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"
    Copy to Clipboard Toggle word wrap
  2. 重新载入配置设置:

    $ sudo systemctl daemon-reload
    Copy to Clipboard Toggle word wrap
  3. 重启 CRI-O 服务以应用设置:

    $ sudo systemctl restart crio
    Copy to Clipboard Toggle word wrap

1.7. 从正在运行的集群获取 OVS 接口的快照

快照代表 OVS 接口在特定时间点的状态和数据。

流程

  • 要查看正在运行的红帽构建的 MicroShift 集群的 OVS 接口快照,请使用以下命令:
$ sudo ovs-vsctl show
Copy to Clipboard Toggle word wrap

正在运行的集群中的 OVS 接口示例

9d9f5ea2-9d9d-4e34-bbd2-dbac154fdc93
    Bridge br-ex
        Port enp1s0
            Interface enp1s0
                type: system
        Port br-ex
            Interface br-ex
                type: internal
        Port patch-br-ex_localhost.localdomain-to-br-int 
1

            Interface patch-br-ex_localhost.localdomain-to-br-int
                type: patch
                options: {peer=patch-br-int-to-br-ex_localhost.localdomain} 
2

    Bridge br-int
        fail_mode: secure
        datapath_type: system
        Port patch-br-int-to-br-ex_localhost.localdomain
            Interface patch-br-int-to-br-ex_localhost.localdomain
                type: patch
                options: {peer=patch-br-ex_localhost.localdomain-to-br-int}
        Port eebee1ce5568761
            Interface eebee1ce5568761 
3

        Port b47b1995ada84f4
            Interface b47b1995ada84f4 
4

        Port "3031f43d67c167f"
            Interface "3031f43d67c167f" 
5

        Port br-int
            Interface br-int
                type: internal
        Port ovn-k8s-mp0 
6

            Interface ovn-k8s-mp0
                type: internal
    ovs_version: "2.17.3"
Copy to Clipboard Toggle word wrap

1 2
patch-br-ex_localhost.localdomain-to-br-intpatch-br-int-to-br-ex_localhost.localdomain 是连接 br-exbr-int 的 OVS 补丁端口。
3 4 5
pod 接口 eebee1ce5568761b47b1995ada84f43031f43d67c167f 使用 pod 沙盒 ID 的前 15 位进行命名,并在 br-int 网桥中插入。
6
hairpin 流量的 OVS 内部端口,ovn-k8s-mp0ovnkube-master 容器创建。

1.8. 为工作负载部署负载均衡器

红帽构建的 MicroShift 提供了网络负载均衡器的内置实现。以下示例使用节点 IP 地址作为 LoadBalancer 服务配置文件的外部 IP 地址。

先决条件

  • 已安装 OpenShift CLI (oc)。
  • 您可以使用具有集群管理角色的用户访问集群。
  • 在使用 OVN-Kubernetes 网络插件配置的基础架构上安装集群。
  • KUBECONFIG 环境变量被设置。

流程

  1. 运行以下命令验证您的 pod 是否正在运行:

    $ oc get pods -A
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建示例命名空间:

    $ NAMESPACE=nginx-lb-test
    Copy to Clipboard Toggle word wrap
    $ oc create ns $NAMESPACE
    Copy to Clipboard Toggle word wrap
  3. 以下示例在命名空间中部署测试 nginx 应用程序的三个副本:

    $ oc apply -n $NAMESPACE -f - <<EOF
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx
    data:
      headers.conf: |
        add_header X-Server-IP  \$server_addr always;
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: quay.io/packit/nginx-unprivileged
            imagePullPolicy: Always
            name: nginx
            ports:
            - containerPort: 8080
            volumeMounts:
            - name: nginx-configs
              subPath: headers.conf
              mountPath: /etc/nginx/conf.d/headers.conf
            securityContext:
              allowPrivilegeEscalation: false
              seccompProfile:
                type: RuntimeDefault
              capabilities:
                drop: ["ALL"]
              runAsNonRoot: true
          volumes:
            - name: nginx-configs
              configMap:
                name: nginx
                items:
                  - key: headers.conf
                    path: headers.conf
    EOF
    Copy to Clipboard Toggle word wrap
  4. 您可以运行以下命令来验证三个副本是否已成功启动:

    $ oc get pods -n $NAMESPACE
    Copy to Clipboard Toggle word wrap
  5. 使用以下示例命令为 nginx 测试应用程序创建 LoadBalancer 服务:

    $ oc create -n $NAMESPACE -f - <<EOF
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
    spec:
      ports:
      - port: 81
        targetPort: 8080
      selector:
        app: nginx
      type: LoadBalancer
    EOF
    Copy to Clipboard Toggle word wrap
    注意

    您必须确保 port 参数是一个主机端口,不被其他 LoadBalancer 服务或 MicroShift 组件的红帽构建。

  6. 运行以下命令,验证服务文件是否存在,是否正确分配了外部 IP 地址,并且外部 IP 与节点 IP 相同:

    $ oc get svc -n $NAMESPACE
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME    TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    nginx   LoadBalancer   10.43.183.104   192.168.1.241   81:32434/TCP   2m
    Copy to Clipboard Toggle word wrap

验证

  • 以下命令使用 LoadBalancer 服务配置的外部 IP 地址形成五个到示例 nginx 应用程序的连接。命令的结果是这些服务器 IP 地址的列表。使用以下命令验证负载均衡器是否向所有正在运行的应用程序发送请求:

    EXTERNAL_IP=192.168.1.241
    seq 5 | xargs -Iz curl -s -I http://$EXTERNAL_IP:81 | grep X-Server-IP
    Copy to Clipboard Toggle word wrap

    如果负载均衡器成功将流量分发到应用程序,则上一命令的输出包含不同的 IP 地址,例如:

    输出示例

    X-Server-IP: 10.42.0.41
    X-Server-IP: 10.42.0.41
    X-Server-IP: 10.42.0.43
    X-Server-IP: 10.42.0.41
    X-Server-IP: 10.42.0.43
    Copy to Clipboard Toggle word wrap

OVN-Kubernetes 不限制可以从红帽构建的 MicroShift 节点外部访问 NodePort 服务的主机接口。以下流程解释了如何在特定主机接口上阻止 NodePort 服务并限制外部访问。

先决条件

  • 您必须具有具有 root 特权的帐户。

流程

  1. 运行以下命令,将 NODEPORT 变量更改为分配给 Kubernetes NodePort 服务的主机端口号:

    # export NODEPORT=30700
    Copy to Clipboard Toggle word wrap
  2. INTERFACE_IP 值从您要阻止的主机接口更改为 IP 地址。例如:

    # export INTERFACE_IP=192.168.150.33
    Copy to Clipboard Toggle word wrap
  3. nat 表 PREROUTING 链中插入一条新规则,以丢弃与目标端口和 IP 地址匹配的所有数据包。例如:

    $ sudo nft -a insert rule ip nat PREROUTING tcp dport $NODEPORT ip daddr $INTERFACE_IP drop
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令列出新规则:

    $ sudo nft -a list chain ip nat PREROUTING
    table ip nat {
    	chain PREROUTING { # handle 1
    		type nat hook prerouting priority dstnat; policy accept;
    		tcp dport 30700 ip daddr 192.168.150.33 drop # handle 134
    		counter packets 108 bytes 18074 jump OVN-KUBE-ETP # handle 116
    		counter packets 108 bytes 18074 jump OVN-KUBE-EXTERNALIP # handle 114
    		counter packets 108 bytes 18074 jump OVN-KUBE-NODEPORT # handle 112
    	}
    }
    Copy to Clipboard Toggle word wrap
    注意

    请记录下新添加的规则的 handle 号。您需要删除以下步骤中的 handle 号。

  5. 使用以下示例命令删除自定义规则:

    $ sudo nft -a delete rule ip nat PREROUTING handle 134
    Copy to Clipboard Toggle word wrap

1.10. 多播 DNS 协议

多播 DNS 协议 (mDNS) 允许使用在 5353/UDP 端口上公开的多播进行名称解析和服务发现。

红帽构建的 MicroShift 包括一个嵌入式 mDNS 服务器用于部署场景,在这种情况下,无法重新配置权威 DNS 服务器来将客户端指向红帽构建的 MicroShift 上的服务。嵌入式 DNS 服务器允许红帽构建的 MicroShift 公开的 .local 域由 LAN 上的其他元素发现。

第 2 章 使用防火墙

红帽构建的 MicroShift 中不需要防火墙,但使用防火墙可以防止对红帽构建的 MicroShift API 的不必要的访问权限。

2.1. 关于通过防火墙的网络流量

firewalld 是一个在后台运行并响应连接请求的网络服务,创建基于主机的动态自定义防火墙。如果您使用带有红帽构建的 MicroShift 的 Red Hat Enterprise Linux (RHEL) for Edge,则应已安装 firewalld,您只需要配置它。遵循的步骤中提供了详细信息。总体而言,当 firewalld 服务运行时,您必须明确允许以下 OVN-Kubernetes 流量:

CNI pod 到 CNI pod
CNI pod 到 Host-Network pod Host-Network pod 到 Host-Network pod
CNI pod
使用 CNI 网络的 Kubernetes pod
Host-Network pod
使用主机网络的 Kubernetes pod,您可以按照以下步骤配置 firewalld 服务。在大多数情况下,firewalld 是 {rhel} 安装的一部分。如果没有 firewalld,您可以参照本节中的简单流程安装它。
重要

红帽构建的 MicroShift pod 必须有权访问内部 CoreDNS 组件和 API 服务器。

2.2. 安装 firewalld 服务

如果您使用 RHEL for Edge,则应该安装 firewalld。要使用该服务,您可以简单地进行配置。如果您没有 firewalld,但希望使用它,则可以使用以下步骤。

使用以下步骤为 MicroShift 的红帽构建安装并运行 firewalld 服务。

流程

  1. 可选:运行以下命令来检查系统中的 firewalld :

    $ rpm -q firewalld
    Copy to Clipboard Toggle word wrap
  2. 如果没有安装 firewalld 服务,请运行以下命令:

    $ sudo dnf install -y firewalld
    Copy to Clipboard Toggle word wrap
  3. 要启动防火墙,请运行以下命令:

    $ sudo systemctl enable firewalld --now
    Copy to Clipboard Toggle word wrap

2.3. 所需的防火墙设置

在防火墙配置过程中,必须启用集群网络的 IP 地址范围。您可以使用默认值或自定义 IP 地址范围。如果您选择从默认的 10.42.0.0/16 设置自定义集群网络 IP 地址范围,还必须在防火墙配置中使用相同的自定义范围。

Expand
表 2.1. 防火墙 IP 地址设置
IP 范围防火墙规则所需的描述

10.42.0.0/16

主机网络 pod 访问其他 pod

169.254.169.1

主机网络 pod 访问红帽构建的 MicroShift API 服务器

以下是防火墙配置强制设置的命令示例:

示例命令

  • 配置主机网络 pod 对其他 pod 的访问:

    $ sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
    Copy to Clipboard Toggle word wrap
  • 配置主机网络 pod 访问由主机端点支持的服务,如红帽 MicroShift API 的构建:

    $ sudo firewall-cmd --permanent --zone=trusted --add-source=169.254.169.1
    Copy to Clipboard Toggle word wrap

2.4. 使用可选端口设置

红帽构建的 MicroShift 防火墙服务允许可选端口设置。

流程

  • 要在防火墙配置中添加自定义端口,请使用以下命令语法:

    $ sudo firewall-cmd --permanent --zone=public --add-port=<port number>/<port protocol>
    Copy to Clipboard Toggle word wrap
    Expand
    表 2.2. 可选端口
    端口协议描述

    80

    TCP

    用于通过 OpenShift Container Platform 路由器提供应用程序的 HTTP 端口。

    443

    TCP

    用于通过 OpenShift Container Platform 路由器提供应用程序的 HTTPS 端口。

    5353

    UDP

    mDNS 服务以响应 OpenShift Container Platform 路由 mDNS 主机。

    30000-32767

    TCP

    为 NodePort 服务保留的端口范围;可用于公开 LAN 上的应用程序。

    30000-32767

    UDP

    为 NodePort 服务保留的端口范围;可用于公开 LAN 上的应用程序。

    6443

    TCP

    用于红帽构建的 MicroShift API 的 HTTPS API 端口。

以下是当要求从外部访问在红帽构建的 MicroShift 上运行的服务时使用的命令示例,如 API 服务器的端口 6443,例如通过路由器公开的应用程序的端口 80 和 443。

示例命令

  • 为红帽构建的 MicroShift API 服务器配置端口:

    $ sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp
    Copy to Clipboard Toggle word wrap
  • 为通过路由器公开的应用程序配置端口:

    $ sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
    Copy to Clipboard Toggle word wrap
    $ sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
    Copy to Clipboard Toggle word wrap

2.5. 允许通过防火墙的网络流量

您可以通过配置 IP 地址范围并插入 DNS 服务器来允许网络流量通过防火墙,以允许通过网络网关从 pod 的内部流量。

流程

  1. 使用以下命令之一设置 IP 地址范围:

    1. 运行以下命令,使用默认值配置 IP 地址范围:

      $ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,使用自定义值配置 IP 地址范围:

      $ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=<custom IP range>
      Copy to Clipboard Toggle word wrap
  2. 要允许 pod 通过网络网关的内部流量,请运行以下命令:

    $ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=169.254.169.1
    Copy to Clipboard Toggle word wrap

2.5.1. 应用防火墙设置

要应用防火墙设置,请使用以下步骤步骤:

流程

  • 通过防火墙配置网络访问后,运行以下命令重启防火墙并应用设置:
$ sudo firewall-cmd --reload
Copy to Clipboard Toggle word wrap

2.6. 验证防火墙设置

重启防火墙后,您可以通过列出设置来验证设置。

流程

  • 要验证在默认公共区(如端口相关的规则)中添加的规则,请运行以下命令:

    $ sudo firewall-cmd --list-all
    Copy to Clipboard Toggle word wrap
  • 要验证在可信区(如 IP-range 相关规则)中添加的规则,请运行以下命令:

    $ sudo firewall-cmd --zone=trusted --list-all
    Copy to Clipboard Toggle word wrap

2.7. 已知的防火墙问题

  • 为避免通过重新加载或重启来破坏流量流,请在启动红帽构建的 MicroShift 前执行防火墙命令。红帽构建的 MicroShift 中的 CNI 驱动程序将 iptable 规则用于某些流量流,如使用 NodePort 服务的用户。iptable 规则由 CNI 驱动程序生成和插入,但在防火墙重新加载或重启时会被删除。缺少 iptable 规则会破坏流量流。如果需要在红帽构建的 MicroShift 运行后执行 firewall 命令,请手动重启 openshift-ovn-kubernetes 命名空间中的 ovnkube-master pod 来重置由 CNI 驱动程序控制的规则。

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat