15.6. 검증


15.6.1. 샘플 애플리케이션 배포

송신 IP 규칙을 테스트하려면 지정한 송신 IP 주소로 제한된 서비스를 생성합니다. 이렇게 하면 IP 주소의 작은 하위 집합을 예상하는 외부 서비스를 시뮬레이션합니다.

  1. echoserver 명령을 실행하여 요청을 복제합니다.

    $ oc -n default run demo-service --image=gcr.io/google_containers/echoserver:1.4
  2. Pod를 서비스로 노출하고 다음 명령을 실행하여 지정한 송신 IP 주소로 수신을 제한합니다.

    $ 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. 네임스페이스 송신 테스트

  1. 대화형 쉘을 시작하여 네임스페이스 송신 규칙을 테스트합니다.

    $ 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 는 송신 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 송신 테스트

  1. 대화형 쉘을 시작하여 Pod 송신 규칙을 테스트합니다.

    $ 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 는 송신 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. 선택 사항: 테스트 차단 송신

  1. 선택 사항: 다음 명령을 실행하여 송신 규칙이 적용되지 않을 때 트래픽이 성공적으로 차단되었는지 테스트합니다.

    $ 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. 명령이 실패하면 송신이 성공적으로 차단됩니다.
  4. 다음 명령을 실행하여 Pod를 종료합니다.

    $ exit
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.