3.2.6. 네임스페이스에서 애플리케이션에 대한 트래픽을 허용하는 네트워크 정책 생성
특정 네임스페이스의 app=web 레이블을 사용하여 Pod로의 트래픽을 허용하는 정책을 구성할 수 있습니다.
이 구성은 다음 사용 사례에서 유용합니다.
- 프로덕션 워크로드가 배포된 네임스페이스로만 트래픽을 프로덕션 데이터베이스로 제한합니다.
- 특정 네임스페이스에 배포된 모니터링 툴을 활성화하여 현재 네임스페이스에서 메트릭을 스크랩할 수 있습니다.
cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.
사전 요구 사항
-
클러스터는
mode:로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.NetworkPolicy -
OpenShift CLI(
oc)를 설치합니다. -
admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
network.openshift.io/policy-group: ingress 레이블을 사용자 지정 네임스페이스 또는 프로젝트에 적용하지 마십시오. 이 레이블은 Operator에서 관리되며 AWS 네트워킹 기능의 Red Hat OpenShift Service용으로 예약되어 있습니다. 시스템에서 생성한 네임스페이스에서 변경할 수 없습니다.
이 레이블을 사용하면 Operator가 상태를 조정하려고 할 때 간헐적인 네트워크 연결, 시스템 NetworkPolicies 리소스의 의도하지 않은 애플리케이션 또는 구성 드리프트가 발생할 수 있습니다. 사용자 정의 트래픽 그룹화의 경우 다음 절차에 표시된 대로 항상 고유한 사용자 정의 레이블을 사용합니다.
프로세스
purpose=production레이블이 있는 특정 네임스페이스의 모든 Pod의 트래픽을 허용하는 정책을 생성합니다. YAML을web-allow-prod.yaml파일에 저장합니다.kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: web-allow-prod namespace: default spec: podSelector: matchLabels: app: web policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: purpose: production다음과 같습니다.
app-
기본 네임스페이스의
app:webpod에만 정책을 적용합니다. 목적-
purpose=production레이블이 있는 네임스페이스의 Pod로만 트래픽을 제한합니다.
다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과
생성된상태가 나열됩니다.$ oc apply -f web-allow-prod.yaml
검증
다음 명령을 입력하여
기본네임스페이스에서 웹 서비스를 시작합니다.$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80다음 명령을 실행하여
prod네임스페이스를 생성합니다.$ oc create namespace prod다음 명령을 실행하여
prod네임스페이스에 레이블을 지정합니다.$ oc label namespace/prod purpose=production다음 명령을 실행하여
dev네임스페이스를 생성합니다.$ oc create namespace dev다음 명령을 실행하여
dev네임스페이스에 레이블을 지정합니다.$ oc label namespace/dev purpose=testing다음 명령을 실행하여
dev네임스페이스에alpine이미지를 배포하고 쉘을 시작합니다.$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh쉘에서 다음 명령을 실행하고 차단된 요청 이유를 확인합니다. 예를 들어 예상되는 출력 상태는
wget: download timed out입니다.# wget -qO- --timeout=2 http://web.default다음 명령을 실행하여
prod네임스페이스에alpine이미지를 배포하고 쉘을 시작합니다.$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh쉘에서 다음 명령을 실행하고 요청이 허용되는지 확인합니다.
# wget -qO- --timeout=2 http://web.default<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>