24.19. 出力サービスの設定


クラスター管理者は、Egress サービスを使用して、ロードバランサーサービスの背後にある Pod の Egress トラフィックを設定できます。

重要

Egress サービスはテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

EgressService カスタムリソース (CR) を使用して、次の方法で送信トラフィックを管理できます。

  • ロードバランサーサービスの IP アドレスを、ロードバランサーサービスの背後にある Pod の送信トラフィックの送信元 IP アドレスとして割り当てます。

    このコンテキストでは、ロードバランサーの IP アドレスを送信元 IP アドレスとして割り当てると、単一の Egress と Ingress を提供するのに役立ちます。たとえば、一部のシナリオでは、ロードバランサーサービスの背後でアプリケーションと通信する外部システムは、アプリケーションの送信元 IP アドレスと宛先 IP アドレスが同じであると想定できます。

    注記

    ロードバランサーサービスの IP アドレスをサービスの背後にある Pod の Egress トラフィックに割り当てると、OVN-Kubernetes は Ingress ポイントと Egress ポイントを単一のノードに制限します。これにより、MetalLB が通常提供するトラフィックのロードバランシングが制限されます。

  • ロードバランサーの背後にある Pod の Egress トラフィックを、デフォルトノードネットワークとは異なるネットワークに割り当てます。

    これは、ロードバランサーの背後にあるアプリケーションの Egress トラフィックを、デフォルトネットワークとは異なるネットワークに割り当てる場合に便利です。通常、別のネットワークは、ネットワークインターフェイスに関連付けられた VRF インスタンスを使用して実装されます。

24.19.1. Egress サービスのカスタムリソース

EgressService カスタムリソースで Egress サービスの設定を定義します。次の YAML は、egress サービスの設定のフィールドを説明します。

apiVersion: k8s.ovn.org/v1
kind: EgressService
metadata:
  name: <egress_service_name> 1
  namespace: <namespace> 2
spec:
  sourceIPBy: <egress_traffic_ip> 3
  nodeSelector: 4
    matchLabels:
      node-role.kubernetes.io/<role>: ""
  network: <egress_traffic_network> 5
1
Egress サービスの名前を指定します。EgressService リソースの名前は、変更するロードバランサーサービスの名前と一致する必要があります。
2
Egress サービスの namespace を指定します。EgressService の namespace は、変更するロードバランサーサービスの namespace と一致する必要があります。Egress サービスは namespace スコープです。
3
サービスの背後にある Pod の Egress トラフィックの送信元 IP アドレスを指定します。有効な値は、LoadBalancerIP または Network です。LoadBalancerIP 値を使用して、LoadBalancer サービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。ネットワーク を指定して、ネットワークインターフェイス IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。
4
オプション: sourceIPBy 指定に LoadBalancerIP 値を使用する場合、単一ノードが LoadBalancer サービストラフィックを処理します。このタスクを割り当て可能なノードを制限するには、nodeSelector フィールドを使用します。サービストラフィックを処理するノードが選択されると、OVN-Kubernetes はそのノードに egress-service.k8s.ovn.org/<svc-namespace>-<svc-name>: "" という形式でラベルを付けます。nodeSelector フィールドが指定されていない場合、どのノードでも LoadBalancer サービストラフィックを管理できます。
5
オプション: 出力トラフィックのルーティングテーブルを指定します。network 仕様を含めない場合、Egress サービスはデフォルトのホストネットワークを使用します。

Egress サービス仕様の例

apiVersion: k8s.ovn.org/v1
kind: EgressService
metadata:
  name: test-egress-service
  namespace: test-namespace
spec:
  sourceIPBy: "LoadBalancerIP"
  nodeSelector:
    matchLabels:
      vrf: "true"
  network: "2"

24.19.2. Egress サービスのデプロイ

Egress サービスをデプロイして、LoadBalancer サービスの背後にある Pod の Egress トラフィックを管理できます。

次の例では、LoadBalancer サービスの Ingress IP アドレスと同じ送信元 IP アドレスを持つように Egress トラフィックを設定します。

前提条件

  • 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
    2. 次のコマンドを実行して、IP アドレスプールの設定を適用します。

      $ oc apply -f ip-addr-pool.yaml
  2. Service CR および EgressService CR を作成します。

    1. 次の例のような内容を含むファイル (service-egress-service.yaml など) を作成します。

      apiVersion: v1
      kind: Service
      metadata:
        name: example-service
        namespace: example-namespace
        annotations:
          metallb.universe.tf/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: ""
      1
      LoadBalancer サービスは、example-pool IP アドレスプールから MetalLB によって割り当てられた IP アドレスを使用します。
      2
      この例では、LoadBalancerIP 値を使用して、LoadBalancer サービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。
      3
      LoadBalancerIP 値を指定すると、単一ノードが LoadBalancer サービスのトラフィックを処理します。この例では、トラフィックを処理する場合に worker ラベルが割り当てられたノードのみを選択できます。ノードが選択されると、OVN-Kubernetes はそのノードに egress-service.k8s.ovn.org/<svc-namespace>-<svc-name>: "" という形式でラベルを付けます。
      注記

      sourceIPBy: "LoadBalancerIP" 設定を使用する場合は、BGPAdvertisement カスタムリソース (CR) でロードバランサーノードを指定する必要があります。

    2. 次のコマンドを実行して、サービスと Egress サービスの設定を適用します。

      $ oc apply -f service-egress-service.yaml
  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
        nodeSelector:
        - matchLabels:
            egress-service.k8s.ovn.org/example-namespace-example-service: "" 1
      1
      この例では、EgressService CR は、ロードバランサーサービス IP アドレスを使用するように、Egress トラフィックの送信元 IP アドレスを設定します。したがって、Pod から発信されるトラフィックに同じリターンパスを使用するには、リターントラフィックのロードバランサーノードを指定する必要があります。

検証

  1. 次のコマンドを実行して、MetalLB サービスの背後で実行されている Pod のアプリケーションエンドポイントにアクセスできることを確認します。

    $ curl <external_ip_address>:<port_number> 1
    1
    アプリケーションのエンドポイントに合わせて外部 IP アドレスとポート番号を更新します。
  2. LoadBalancer サービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てた場合は、tcpdump などのツールを使用して外部クライアントで受信したパケットを分析し、この設定を確認します。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.