7.3.3. 송신 방화벽을 사용하여 Pod 액세스 제한
OpenShift Container Platform 클러스터 관리자는 송신 정책을 사용하여 일부 또는 모든 Pod가 클러스터 내에서 액세스할 수 있는 외부 주소를 제한할 수 있습니다.
포드는 내부 호스트와만 통신할 수 있으며 공용 인터넷에 대한 연결을 시작할 수 없습니다.
또는,
포드는 공용 인터넷 전용으로 통신할 수 있으며 클러스터 외부에서는 내부 호스트 연결을 시작할 수 없습니다.
또는,
- Pod는 연결할 이유가 없어 지정된 내부 서브넷/호스트에 도달할 수 없습니다.
예를 들어 지정된 IP 범위에 대한 <project A> 액세스를 허용하지만 <
에 대한 동일한 액세스를 거부하도록 다양한 송신 정책을 사용하여 프로젝트를 구성할 수 있습니다.
project B>
송신 정책을 통해 Pod 액세스를 제한하려면 ovs-multitenant 플러그인이 활성화되어 있어야 합니다.
프로젝트 관리자는 EgressNetworkPolicy 오브젝트
를 생성하거나 프로젝트에서 생성한 개체를 편집할 수 없습니다. 또한 EgressNetworkPolicy
를 생성할 수 있는 몇 가지 제한 사항이 있습니다.
-
기본
프로젝트(및oc adm pod-network make-projects-global
를 통해 전역적으로 수행된 다른 프로젝트)에는 송신 정책이 없습니다. -
oc adm pod-network join-projects
를 통해 두 개의 프로젝트를 함께 병합하면 결합된 프로젝트에서 송신 정책을 사용할 수 없습니다. - 송신 정책 오브젝트가 두 개 이상일 수 있는 프로젝트는 없습니다.
이러한 제한 사항을 위반하면 프로젝트의 송신 정책이 손상되고 모든 외부 네트워크 트래픽이 삭제될 수 있습니다.
7.3.3.1. Pod 액세스 제한 구성
포드 액세스 제한을 구성하려면 oc
명령 또는 REST API를 사용해야 합니다. oc [create|replace|delete]
를 사용하여 EgressNetworkPolicy 오브젝트
를 조작할 수 있습니다. api/swagger-spec/oapi-v1.json 파일에는 오브젝트의 실제 작동 방식에 대한 API 수준의 세부 정보가 있습니다.
Pod 액세스 제한을 구성하려면 다음을 수행합니다.
- 영향을 미칠 프로젝트로 이동합니다.
Pod 제한 정책에 대한 JSON 파일을 생성합니다.
# oc create -f <policy>.json
정책 세부 정보를 사용하여 JSON 파일을 구성합니다. 예를 들면 다음과 같습니다.
{ "kind": "EgressNetworkPolicy", "apiVersion": "v1", "metadata": { "name": "default" }, "spec": { "egress": [ { "type": "Allow", "to": { "cidrSelector": "1.2.3.0/24" } }, { "type": "Allow", "to": { "dnsName": "www.foo.com" } }, { "type": "Deny", "to": { "cidrSelector": "0.0.0.0/0" } } ] } }
위의 예가 프로젝트에 추가되면 IP 범위
1.2.3.0/24
및 도메인 이름www.foo.com
에 대한 트래픽을 허용하지만 다른 모든 외부 IP 주소에 대한 액세스를 거부합니다. (정책이 외부 트래픽에만 적용되므로 다른 포드에 대한 트래픽은 영향을 받지 않습니다.)EgressNetworkPolicy
의 규칙이 순서대로 확인되고 일치하는 첫 번째 규칙이 적용됩니다. 위 예제의 세 규칙이 되돌리면0.0.0.0/0
규칙이 먼저 확인되므로 트래픽이1.2.3.0/24
및www.foo.com
에 허용되지 않으며 모든 트래픽과 일치하고 거부됩니다.도메인 이름 업데이트가 30분 이내에 반영됩니다. 위의 예에서
www.foo.com
가10.11.12.13
로 해결되었지만 나중에20.21.22.23
으로 변경되었습니다. 그런 다음 OpenShift Container Platform이 이러한 DNS 업데이트에 맞게 조정하는 데 최대 30분이 걸립니다.