検索

15.6. 検証

download PDF

15.6.1. サンプルアプリケーションのデプロイ

Egress IP ルールをテストするには、指定した Egress IP アドレスに制限されるサービスを作成します。これは、IP アドレスの小さなサブセットを期待する外部サービスをシミュレートします。

  1. リクエストを複製するには、echoserver コマンドを実行します。

    $ oc -n default run demo-service --image=gcr.io/google_containers/echoserver:1.4
  2. 次のコマンドを実行して、Pod をサービスとして公開し、指定した Egress IP アドレスへの Ingress を制限します。

    $ cat <<EOF | oc apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: demo-service
      namespace: default
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-scheme: "internal"
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    spec:
      selector:
        run: demo-service
      ports:
        - port: 80
          targetPort: 8080
      type: LoadBalancer
      externalTrafficPolicy: Local
      # NOTE: this limits the source IPs that are allowed to connect to our service.  It
      #       is being used as part of this demo, restricting connectivity to our egress
      #       IP addresses only.
      # NOTE: these egress IPs are within the subnet range(s) in which my worker nodes
      #       are deployed.
      loadBalancerSourceRanges:
        - 10.10.100.254/32
        - 10.10.150.254/32
        - 10.10.200.254/32
        - 10.10.100.253/32
        - 10.10.150.253/32
        - 10.10.200.253/32
    EOF
  3. 次のコマンドを実行して、ロードバランサーのホスト名を取得し、環境変数として保存します。

    $ export LOAD_BALANCER_HOSTNAME=$(oc get svc -n default demo-service -o json | jq -r '.status.loadBalancer.ingress[].hostname')

15.6.2. namespace の Egress のテスト

  1. 対話型シェルを起動して、namespace の Egress ルールをテストします。

    $ oc run \
      demo-egress-ns \
      -it \
      --namespace=demo-egress-ns \
      --env=LOAD_BALANCER_HOSTNAME=$LOAD_BALANCER_HOSTNAME \
      --image=registry.access.redhat.com/ubi9/ubi -- \
      bash
  2. ロードバランサーにリクエストを送信し、正常に接続できることを確認します。

    $ curl -s http://$LOAD_BALANCER_HOSTNAME
  3. 接続が成功したかどうかの出力を確認します。

    注記

    client_address は、Egress IP ではなく、ロードバランサーの内部 IP アドレスです。.spec.loadBalancerSourceRanges に制限されたサービスに接続することで、クライアントアドレスが正しく設定されていることを確認できます。

    出力例

    CLIENT VALUES:
    client_address=10.10.207.247
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://internal-a3e61de18bfca4a53a94a208752b7263-148284314.us-east-1.elb.amazonaws.com:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=internal-a3e61de18bfca4a53a94a208752b7263-148284314.us-east-1.elb.amazonaws.com
    user-agent=curl/7.76.1
    BODY:
    -no body in request-

  4. 以下のコマンドを実行して Pod を終了します。

    $ exit

15.6.3. Pod の Egress のテスト

  1. 対話型シェルを起動して、Pod の Egress ルールをテストします。

    $ oc run \
      demo-egress-pod \
      -it \
      --namespace=demo-egress-pod \
      --env=LOAD_BALANCER_HOSTNAME=$LOAD_BALANCER_HOSTNAME \
      --image=registry.access.redhat.com/ubi9/ubi -- \
      bash
  2. 次のコマンドを実行して、ロードバランサーにリクエストを送信します。

    $ curl -s http://$LOAD_BALANCER_HOSTNAME
  3. 接続が成功したかどうかの出力を確認します。

    注記

    client_address は、Egress IP ではなく、ロードバランサーの内部 IP アドレスです。.spec.loadBalancerSourceRanges に制限されたサービスに接続することで、クライアントアドレスが正しく設定されていることを確認できます。

    出力例

    CLIENT VALUES:
    client_address=10.10.207.247
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://internal-a3e61de18bfca4a53a94a208752b7263-148284314.us-east-1.elb.amazonaws.com:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=internal-a3e61de18bfca4a53a94a208752b7263-148284314.us-east-1.elb.amazonaws.com
    user-agent=curl/7.76.1
    BODY:
    -no body in request-

  4. 以下のコマンドを実行して Pod を終了します。

    $ exit

15.6.4. オプション: ブロックされた Egress のテスト

  1. オプション: 次のコマンドを実行して、Egress ルールが適用されない場合にトラフィックが正常にブロックされることをテストします。

    $ oc run \
      demo-egress-pod-fail \
      -it \
      --namespace=demo-egress-pod \
      --env=LOAD_BALANCER_HOSTNAME=$LOAD_BALANCER_HOSTNAME \
      --image=registry.access.redhat.com/ubi9/ubi -- \
      bash
  2. 次のコマンドを実行して、ロードバランサーにリクエストを送信します。

    $ curl -s http://$LOAD_BALANCER_HOSTNAME
  3. コマンドが失敗すると、Egress が正常にブロックされます。
  4. 以下のコマンドを実行して Pod を終了します。

    $ exit
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.