Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

7.3.3. 송신 방화벽을 사용하여 Pod 액세스 제한

OpenShift Container Platform 클러스터 관리자는 송신 정책을 사용하여 일부 또는 모든 Pod가 클러스터 내에서 액세스할 수 있는 외부 주소를 제한할 수 있습니다.

  • 포드는 내부 호스트와만 통신할 수 있으며 공용 인터넷에 대한 연결을 시작할 수 없습니다.

    또는,

  • 포드는 공용 인터넷 전용으로 통신할 수 있으며 클러스터 외부에서는 내부 호스트 연결을 시작할 수 없습니다.

    또는,

  • Pod는 연결할 이유가 없어 지정된 내부 서브넷/호스트에 도달할 수 없습니다.

예를 들어 지정된 IP 범위에 대한 <project A> 액세스를 허용하지만 < project B> 에 대한 동일한 액세스를 거부하도록 다양한 송신 정책을 사용하여 프로젝트를 구성할 수 있습니다.

경고

송신 정책을 통해 Pod 액세스를 제한하려면 ovs-multitenant 플러그인이 활성화되어 있어야 합니다.

프로젝트 관리자는 EgressNetworkPolicy 오브젝트 를 생성하거나 프로젝트에서 생성한 개체를 편집할 수 없습니다. 또한 EgressNetworkPolicy 를 생성할 수 있는 몇 가지 제한 사항이 있습니다.

  1. 기본 프로젝트(및 oc adm pod-network make-projects-global를 통해 전역적으로 수행된 다른 프로젝트)에는 송신 정책이 없습니다.
  2. oc adm pod-network join-projects를 통해 두 개의 프로젝트를 함께 병합하면 결합된 프로젝트에서 송신 정책을 사용할 수 없습니다.
  3. 송신 정책 오브젝트가 두 개 이상일 수 있는 프로젝트는 없습니다.

이러한 제한 사항을 위반하면 프로젝트의 송신 정책이 손상되고 모든 외부 네트워크 트래픽이 삭제될 수 있습니다.

7.3.3.1. Pod 액세스 제한 구성

포드 액세스 제한을 구성하려면 oc 명령 또는 REST API를 사용해야 합니다. oc [create|replace|delete] 를 사용하여 EgressNetworkPolicy 오브젝트 를 조작할 수 있습니다. api/swagger-spec/oapi-v1.json 파일에는 오브젝트의 실제 작동 방식에 대한 API 수준의 세부 정보가 있습니다.

Pod 액세스 제한을 구성하려면 다음을 수행합니다.

  1. 영향을 미칠 프로젝트로 이동합니다.
  2. Pod 제한 정책에 대한 JSON 파일을 생성합니다.

    # oc create -f <policy>.json
  3. 정책 세부 정보를 사용하여 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/24www.foo.com 에 허용되지 않으며 모든 트래픽과 일치하고 거부됩니다.

    도메인 이름 업데이트가 30분 이내에 반영됩니다. 위의 예에서 www.foo.com10.11.12.13 로 해결되었지만 나중에 20.21.22.23 으로 변경되었습니다. 그런 다음 OpenShift Container Platform이 이러한 DNS 업데이트에 맞게 조정하는 데 최대 30분이 걸립니다.