12.6. 검증
12.6.1. 샘플 애플리케이션 배포 링크 복사링크가 클립보드에 복사되었습니다!
송신 IP 규칙을 테스트하려면 지정한 송신 IP 주소로 제한된 서비스를 생성합니다. 이렇게 하면 IP 주소의 작은 하위 집합을 예상하는 외부 서비스를 시뮬레이션합니다.
echoserver명령을 실행하여 요청을 복제합니다.$ oc -n default run demo-service --image=gcr.io/google_containers/echoserver:1.4Pod를 서비스로 노출하고 다음 명령을 실행하여 지정한 송신 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로드 밸런서 호스트 이름을 검색하고 다음 명령을 실행하여 환경 변수로 저장합니다.
$ export LOAD_BALANCER_HOSTNAME=$(oc get svc -n default demo-service -o json | jq -r '.status.loadBalancer.ingress[].hostname')
12.6.2. 네임스페이스 송신 테스트 링크 복사링크가 클립보드에 복사되었습니다!
대화형 쉘을 시작하여 네임스페이스 송신 규칙을 테스트합니다.
$ 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요청을 로드 밸런서에 전송하고 성공적으로 연결할 수 있는지 확인합니다.
$ curl -s http://$LOAD_BALANCER_HOSTNAME성공적인 연결에 대한 출력을 확인합니다.
참고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-다음 명령을 실행하여 Pod를 종료합니다.
$ exit
12.6.3. Pod 송신 테스트 링크 복사링크가 클립보드에 복사되었습니다!
대화형 쉘을 시작하여 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다음 명령을 실행하여 로드 밸런서에 요청을 보냅니다.
$ curl -s http://$LOAD_BALANCER_HOSTNAME성공적인 연결에 대한 출력을 확인합니다.
참고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-다음 명령을 실행하여 Pod를 종료합니다.
$ exit
12.6.4. 선택 사항: 테스트 차단 송신 링크 복사링크가 클립보드에 복사되었습니다!
선택 사항: 다음 명령을 실행하여 송신 규칙이 적용되지 않을 때 트래픽이 성공적으로 차단되었는지 테스트합니다.
$ 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다음 명령을 실행하여 로드 밸런서에 요청을 보냅니다.
$ curl -s http://$LOAD_BALANCER_HOSTNAME- 명령이 실패하면 송신이 성공적으로 차단됩니다.
다음 명령을 실행하여 Pod를 종료합니다.
$ exit