10.2. Egress サービスのデプロイ
Egress サービスをデプロイして、LoadBalancer サービスの背後にある Pod の Egress トラフィックを管理できます。
次の例では、LoadBalancer サービスの Ingress IP アドレスと同じ送信元 IP アドレスを持つように Egress トラフィックを設定します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてログインしている。 -
MetalLB
BGPPeerリソースを設定している。
手順
サービスに必要な IP を使用して
IPAddressPoolCR を作成します。次の例のような内容を含むファイル (
ip-addr-pool.yamlなど) を作成します。apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: example-pool namespace: metallb-system spec: addresses: - 172.19.0.100/32次のコマンドを実行して、IP アドレスプールの設定を適用します。
$ oc apply -f ip-addr-pool.yaml
ServiceCR およびEgressServiceCR を作成します。次の例のような内容を含むファイル (
service-egress-service.yamlなど) を作成します。apiVersion: v1 kind: Service metadata: name: example-service namespace: example-namespace annotations: metallb.io/address-pool: example-pool1 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-poolIP アドレスプールから 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) でロードバランサーノードを指定する必要があります。
次のコマンドを実行して、サービスと Egress サービスの設定を適用します。
$ oc apply -f service-egress-service.yaml
BGPAdvertisementCR を作成してサービスをアドバタイズします。次の例のような内容を含むファイル (
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 - 1
- この例では、
EgressServiceCR は、ロードバランサーサービス IP アドレスを使用するように、Egress トラフィックの送信元 IP アドレスを設定します。したがって、Pod から発信されるトラフィックに同じリターンパスを使用するには、リターントラフィックのロードバランサーノードを指定する必要があります。
検証
次のコマンドを実行して、MetalLB サービスの背後で実行されている Pod のアプリケーションエンドポイントにアクセスできることを確認します。
$ curl <external_ip_address>:<port_number>1 - 1
- アプリケーションのエンドポイントに合わせて外部 IP アドレスとポート番号を更新します。
-
LoadBalancerサービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てた場合は、tcpdumpなどのツールを使用して外部クライアントで受信したパケットを分析し、この設定を確認します。