11.2. 部署出口服务


您可以部署出口服务,以管理 LoadBalancer 服务后面的 pod 的出口流量。

以下示例将出口流量配置为具有与 LoadBalancer 服务的入口 IP 地址相同的源 IP 地址。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。
  • 已配置了 MetalLB BGPPeer 资源。

流程

  1. 为服务创建一个带有所需 IP 的 IPAddressPool CR:

    1. 创建一个文件,如 ip-addr-pool.yaml,其内容类似以下示例:

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        name: example-pool
        namespace: metallb-system
      spec:
        addresses:
        - 172.19.0.100/32
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,为 IP 地址池应用配置:

      $ oc apply -f ip-addr-pool.yaml
      Copy to Clipboard Toggle word wrap
  2. 创建 ServiceEgressService CR:

    1. 创建一个文件,如 service-egress-service.yaml,其内容类似以下示例:

      apiVersion: v1
      kind: Service
      metadata:
        name: example-service
        namespace: example-namespace
        annotations:
          metallb.io/address-pool: example-pool 
      1
      
      spec:
        selector:
          app: example
        ports:
          - name: http
            protocol: TCP
            port: 8080
            targetPort: 8080
        type: LoadBalancer
      ---
      apiVersion: k8s.ovn.org/v1
      kind: EgressService
      metadata:
        name: example-service
        namespace: example-namespace
      spec:
        sourceIPBy: "LoadBalancerIP" 
      2
      
        nodeSelector: 
      3
      
          matchLabels:
            node-role.kubernetes.io/worker: ""
      Copy to Clipboard Toggle word wrap
      1
      LoadBalancer 服务使用 MetalLB 从 example-pool IP 地址池分配的 IP 地址。
      2
      本例使用 LoadBalancerIP 值来分配 LoadBalancer 服务的入口 IP 地址,作为出口流量的源 IP 地址。
      3
      当您指定 LoadBalancerIP 值时,单个节点处理 LoadBalancer 服务的流量。在本例中,只能选择具有 worker 标签的节点来处理流量。当选择节点时,OVN-Kubernetes 会以 egress-service.k8s.ovn.org/<svc-namespace>-<svc-name>: "" 格式标记节点。
      注意

      如果使用 sourceIPBy: "LoadBalancerIP" 设置,您必须在 BGPAdvertisement 自定义资源(CR) 中指定 load-balancer 节点。

    2. 运行以下命令,为服务和出口服务应用配置:

      $ oc apply -f service-egress-service.yaml
      Copy to Clipboard Toggle word wrap
  3. 创建 BGPAdvertisement CR 来公告服务:

    1. 创建一个文件,如 service-bgp-advertisement.yaml,其内容类似以下示例:

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: example-bgp-adv
        namespace: metallb-system
      spec:
        ipAddressPools:
        - example-pool
        nodeSelectors:
        - matchLabels:
            egress-service.k8s.ovn.org/example-namespace-example-service: "" 
      1
      Copy to Clipboard Toggle word wrap
      1
      在本例中,EgressService CR 将出口流量的源 IP 地址配置为使用负载均衡器服务 IP 地址。因此,您必须指定负载均衡器节点返回流量,以便为来自 pod 的流量使用相同的返回路径。

验证

  1. 运行以下命令,验证您可以访问 MetalLB 服务后运行的 pod 的应用程序端点:

    $ curl <external_ip_address>:<port_number> 
    1
    Copy to Clipboard Toggle word wrap
    1
    更新外部 IP 地址和端口号,以适合您的应用程序端点。
  2. 如果您将 LoadBalancer 服务的入口 IP 地址分配为出口流量的源 IP 地址,请使用 tcpdump 等工具分析外部客户端接收的数据包来验证此配置。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat