3.2. 네트워크 정책 생성
클러스터 관리자는 네임스페이스에 대한 네트워크 정책을 생성할 수 있습니다.
3.2.1. NetworkPolicy 오브젝트 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 구성은 NetworkPolicy 개체의 예에 주석을 달았습니다.
다음과 같습니다.
name- NetworkPolicy 오브젝트의 이름입니다.
spec.podSelector- 정책이 적용되는 포드를 설명하는 선택기입니다. 정책 오브젝트는 NetworkPolicy 오브젝트가 정의된 프로젝트에서 Pod만 선택할 수 있습니다.
ingress.from.podSelector- 정책 객체가 유입 트래픽을 허용하는 포드와 일치하는 선택기입니다. 선택기는 NetworkPolicy와 동일한 네임스페이스에 있는 포드를 일치시킵니다.
ingress.ports- 트래픽을 수용할 하나 이상의 대상 포트 목록입니다.
3.2.2. CLI를 사용하여 네트워크 정책 만들기 링크 복사링크가 클립보드에 복사되었습니다!
클러스터의 네임스페이스에서 허용된 수신 또는 송신 네트워크 트래픽을 설명하는 세분화된 규칙을 정의하기 위해 네트워크 정책을 생성할 수 있습니다.
cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.
사전 요구 사항
-
클러스터는
NetworkPolicy객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며,모드: NetworkPolicy가설정되어 있습니다. -
OpenShift CLI(
oc)를 설치합니다. -
admin권한이 있는 사용자로 클러스터에 로그인합니다. - 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
정책 규칙을 만듭니다.
<policy_name>.yaml파일을 생성합니다.touch <policy_name>.yaml
$ touch <policy_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
<policy_name>- 네트워크 정책 파일 이름을 지정합니다.
생성된 파일에서 네트워크 정책을 정의합니다. 다음 예제에서는 모든 네임스페이스의 모든 포드에서 들어오는 트래픽을 거부합니다. 이는 다른 네트워크 정책의 구성에 의해 허용되는 크로스 포드 트래픽 외의 모든 크로스 포드 네트워킹을 차단하는 기본 정책입니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예제 구성은 동일한 네임스페이스에 있는 모든 포드에서 수신 트래픽을 허용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예제에서는 특정 네임스페이스에서 하나의 포드로의 수신 트래픽을 허용합니다. 이 정책은
namespace-y에서 실행되는 포드에서pod-a레이블이 있는 포드로의 트래픽을 허용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예제 구성은 서비스에 대한 트래픽을 제한합니다. 이 정책을 적용하면
app=bookstore및role=api레이블이 있는 모든 포드는app=bookstore레이블이 있는 포드에서만 액세스할 수 있습니다. 이 예에서 애플리케이션은app=bookstore및role=api라벨이 표시된 REST API 서버가 될 수 있습니다.이 예제 구성은 다음과 같은 사용 사례를 다룹니다.
- 해당 서비스에 대한 트래픽을 해당 서비스를 사용해야 하는 다른 마이크로서비스로만 제한합니다.
해당 애플리케이션에서만 데이터베이스를 사용할 수 있도록 연결을 제한합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 명령을 실행하여 네트워크 정책 오브젝트를 생성합니다. 성공적인 출력에는 정책 개체의 이름과
생성상태가 나열됩니다.oc apply -f <policy_name>.yaml -n <namespace>
$ oc apply -f <policy_name>.yaml -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
<policy_name>- 네트워크 정책 파일 이름을 지정합니다.
<namespace>- 선택적 매개변수 현재 네임스페이스와 다른 네임스페이스에 객체를 정의한 경우 매개변수는 네임스페이스를 지정합니다.
성공적인 출력에는 정책 개체의 이름과
생성상태가 나열됩니다.참고클러스터 관리자권한으로 웹 콘솔에 로그인하면 YAML에서 직접 또는 웹 콘솔의 양식을 통해 클러스터의 모든 네임스페이스에 네트워크 정책을 만들 수 있습니다.
3.2.3. 모든 네트워크 정책을 거부하는 기본 정책 만들기 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 모든 네트워크 거부 정책은 다른 배포된 네트워크 정책의 구성에서 허용하는 네트워크 트래픽과 호스트 네트워크 포드 간 트래픽을 제외한 모든 크로스 포드 네트워킹을 차단합니다. 이 절차는 my-project 네임스페이스에 deny-by-default 정책을 적용하여 강력한 거부 정책을 시행합니다.
트래픽 통신을 허용하는 NetworkPolicy 사용자 정의 리소스(CR)를 구성하지 않으면 다음 정책으로 인해 클러스터 전체에서 통신 문제가 발생할 수 있습니다.
사전 요구 사항
-
클러스터는
NetworkPolicy객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며,모드: NetworkPolicy가설정되어 있습니다. -
OpenShift CLI(
oc)를 설치합니다. -
admin권한이 있는 사용자로 클러스터에 로그인합니다. - 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
모든 네임스페이스의 모든 포드에서 들어오는 트래픽을 거부하는
기본 거부정책을 정의하는 다음 YAML을 만듭니다.deny-by-default.yaml파일에 YAML을 저장합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
네임스페이스-
정책을 배포할 네임스페이스를 지정합니다. 예를 들어,
my-project네임스페이스. podSelector-
이 필드가 비어 있으면 구성이 모든 포드와 일치합니다. 따라서 해당 정책은
my-project네임스페이스의 모든 포드에 적용됩니다. 입구-
여기서
[]는수신규칙이 지정되지 않았음을 나타냅니다. 이로 인해 모든 포드에 대한 수신 트래픽이 삭제됩니다.
다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 개체의 이름과
생성상태가 나열됩니다.oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.4. 외부 클라이언트의 트래픽을 허용하는 네트워크 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 거부 정책이 적용되면 app=web 레이블이 있는 포드로의 외부 클라이언트의 트래픽을 허용하는 정책을 구성할 수 있습니다.
cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.
공용 인터넷에서 직접 또는 로드 밸런서를 사용하여 포드에 액세스하는 외부 서비스를 허용하는 정책을 구성하려면 다음 절차를 따르세요. 트래픽은 app=web 라벨이 있는 Pod에만 허용됩니다.
사전 요구 사항
-
클러스터는
NetworkPolicy객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며,모드: NetworkPolicy가설정되어 있습니다. -
OpenShift CLI(
oc)를 설치합니다. -
admin권한이 있는 사용자로 클러스터에 로그인합니다. - 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
퍼블릭 인터넷에서 직접 또는 로드 밸런서를 사용하여 트래픽이 포드에 액세스할 수 있도록 허용하는 정책을 만듭니다.
web-allow-external.yaml파일에 YAML을 저장합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 개체의 이름과
생성상태가 나열됩니다.oc apply -f web-allow-external.yaml
$ oc apply -f web-allow-external.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 정책은 다음 다이어그램에 표시된 것처럼 외부 트래픽을 포함한 모든 리소스의 트래픽을 허용합니다.
3.2.5. 모든 네임스페이스에서 애플리케이션으로의 트래픽을 허용하는 네트워크 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
모든 네임스페이스의 모든 포드에서 특정 애플리케이션으로의 트래픽을 허용하는 정책을 구성할 수 있습니다.
cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.
사전 요구 사항
-
클러스터는
NetworkPolicy객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며,모드: NetworkPolicy가설정되어 있습니다. -
OpenShift CLI(
oc)를 설치합니다. -
admin권한이 있는 사용자로 클러스터에 로그인합니다. - 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
모든 네임스페이스의 모든 포드에서 특정 애플리케이션으로의 트래픽을 허용하는 정책을 만듭니다.
web-allow-all-namespaces.yaml파일에 YAML을 저장합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
app-
이 정책은 기본 네임스페이스의
app:web포드에만 적용됩니다. namespaceSelector모든 네임스페이스의 모든 포드를 선택합니다.
참고기본적으로 정책 개체에서
namespaceSelector매개변수를 지정하지 않으면 네임스페이스가 선택되지 않습니다. 즉, 정책은 네트워크 정책이 배포된 네임스페이스에서만 트래픽을 허용합니다.
다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 개체의 이름과
생성상태가 나열됩니다.oc apply -f web-allow-all-namespaces.yaml
$ oc apply -f web-allow-all-namespaces.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음 명령을 입력하여
기본네임스페이스에서 웹 서비스를 시작합니다.oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
보조네임스페이스에알파인이미지를 배포하고 셸을 시작합니다.oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 셸에서 다음 명령을 실행하고 서비스가 요청을 허용하는지 확인합니다.
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.6. 네임스페이스에서 애플리케이션으로의 트래픽을 허용하는 네트워크 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
특정 네임스페이스에서 app=web 라벨이 있는 포드로의 트래픽을 허용하는 정책을 구성할 수 있습니다. 이 구성은 다음과 같은 사용 사례에 유용합니다.
- 프로덕션 워크로드가 배포된 네임스페이스에만 프로덕션 데이터베이스로의 트래픽을 제한합니다.
- 특정 네임스페이스에 배포된 모니터링 도구를 활성화하여 현재 네임스페이스에서 메트릭을 스크래핑합니다.
cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.
사전 요구 사항
-
클러스터는
NetworkPolicy객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며,모드: NetworkPolicy가설정되어 있습니다. -
OpenShift CLI(
oc)를 설치합니다. -
admin권한이 있는 사용자로 클러스터에 로그인합니다. - 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
특정 네임스페이스에 있는 모든 포드의 트래픽을 허용하는 정책을
purpose=production레이블로 만듭니다.web-allow-prod.yaml파일에 YAML을 저장합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
app-
이 정책은 기본 네임스페이스의
app:web포드에만 적용됩니다. 목적-
라벨이
purpose=production인 네임스페이스의 포드에만 트래픽을 제한합니다.
다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 개체의 이름과
생성상태가 나열됩니다.oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음 명령을 입력하여
기본네임스페이스에서 웹 서비스를 시작합니다.oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
prod네임스페이스를 만듭니다.oc create namespace prod
$ oc create namespace prodCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
prod네임스페이스에 레이블을 지정합니다.oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=productionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
dev네임스페이스를 만듭니다.oc create namespace dev
$ oc create namespace devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
dev네임스페이스에 레이블을 지정합니다.oc label namespace/dev purpose=testing
$ oc label namespace/dev purpose=testingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
dev네임스페이스에alpine이미지를 배포하고 셸을 시작합니다.oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 셸에서 다음 명령을 실행하고 요청이 차단된 이유를 살펴보세요. 예를 들어, 예상 출력 상태는
wget: download timed out 입니다.wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
prod네임스페이스에alpine이미지를 배포하고 셸을 시작합니다.oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 셸에서 다음 명령을 실행하고 요청이 허용되는지 확인하세요.
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow