15.6. 검증
15.6.1. 샘플 애플리케이션 배포
송신 IP 규칙을 테스트하려면 지정한 송신 IP 주소로 제한된 서비스를 생성합니다. 이렇게 하면 IP 주소의 작은 하위 집합을 예상하는 외부 서비스를 시뮬레이션합니다.
echoserver
명령을 실행하여 요청을 복제합니다.$ oc -n default run demo-service --image=gcr.io/google_containers/echoserver:1.4
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
로드 밸런서 호스트 이름을 검색하고 다음 명령을 실행하여 환경 변수로 저장합니다.
$ export LOAD_BALANCER_HOSTNAME=$(oc get svc -n default demo-service -o json | jq -r '.status.loadBalancer.ingress[].hostname')
15.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
15.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
15.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