18.2. 서비스의 ExternalIP 구성
클러스터 관리자는 클러스터의 서비스로 트래픽을 보낼 수 있는 클러스터 외부의 IP 주소 블록을 지정할 수 있습니다.
이 기능은 일반적으로 베어 메탈 하드웨어에 설치된 클러스터에 가장 유용합니다.
18.2.1. 사전 요구 사항
- 네트워크 인프라는 외부 IP 주소에 대한 트래픽을 클러스터로 라우팅해야 합니다.
18.2.2. ExternalIP 정보
클라우드 환경이 아닌 경우 OpenShift Container Platform에서는 ExternalIP 기능을 통해 Service
오브젝트 spec.externalIPs[]
필드에 외부 IP 주소 할당을 지원합니다. 이 필드를 설정하면 OpenShift Container Platform에서 추가 가상 IP 주소를 서비스에 할당합니다. IP 주소는 클러스터에 정의된 서비스 네트워크 외부에 있을 수 있습니다. ExternalIP 함수로 구성된 서비스는 type=NodePort
인 서비스와 유사하게 작동하므로 부하 분산을 위해 트래픽을 로컬 노드로 보낼 수 있습니다.
정의한 외부 IP 주소 블록이 클러스터로 라우팅되도록 네트워킹 인프라를 구성해야 합니다.
OpenShift Container Platform은 다음 기능을 추가하여 Kubernetes의 ExternalIP 기능을 확장합니다.
- 구성 가능한 정책을 통해 사용자가 외부 IP 주소 사용 제한
- 요청 시 서비스에 자동으로 외부 IP 주소 할당
ExternalIP 기능은 기본적으로 비활성화되어 있으며, 사용 시 외부 IP 주소에 대한 클러스터 내 트래픽이 해당 서비스로 전달되기 때문에 보안 위험이 발생할 수 있습니다. 이 경우 클러스터 사용자가 외부 리소스로 향하는 민감한 트래픽을 가로챌 수 있습니다.
이 기능은 클라우드 배포가 아닌 경우에만 지원됩니다. 클라우드 배포의 경우 클라우드 로드 밸런서 자동 배포를 위한 로드 밸런서 서비스를 사용하여 서비스 끝점을 대상으로 합니다.
다음과 같은 방법으로 외부 IP 주소를 할당할 수 있습니다.
- 외부 IP 자동 할당
-
OpenShift Container Platform에서는
spec.type=LoadBalancer
가 설정된Service
오브젝트를 생성할 때autoAssignCIDRs
CIDR 블록의 IP 주소를spec.externalIPs[]
배열에 자동으로 할당합니다. 이 경우 OpenShift Container Platform은 로드 밸런서 서비스 유형의 비클라우드 버전을 구현하고 서비스에 IP 주소를 할당합니다. 자동 할당은 기본적으로 비활성화되어 있으며 다음 섹션에 설명된 대로 클러스터 관리자가 구성해야 합니다. - 외부 IP 수동 할당
-
OpenShift Container Platform에서는
Service
오브젝트를 생성할 때spec.externalIPs[]
배열에 할당된 IP 주소를 사용합니다. 다른 서비스에서 이미 사용 중인 IP 주소는 지정할 수 없습니다.
18.2.2.1. ExternalIP 구성
OpenShift Container Platform에 대한 외부 IP 주소 사용은 cluster
라는 Network.config.openshift.io
CR에 있는 다음 필드로 관리합니다.
-
spec.externalIP.autoAssignCIDRs
는 서비스에 대한 외부 IP 주소를 선택할 때 로드 밸런서에서 사용하는 IP 주소 블록을 정의합니다. OpenShift Container Platform에서는 자동 할당에 대해 하나의 IP 주소 블록만 지원합니다. 이렇게 하면 서비스에 ExternalIP를 수동으로 할당 때 제한된 수의 공유 IP 주소로 구성된 포트 공간을 관리하는 것보다 더 간단할 수 있습니다. 자동 할당을 사용하는 경우spec.type=LoadBalancer
인Service
에 외부 IP 주소가 할당됩니다. -
spec.externalIP.policy
는 IP 주소를 수동으로 지정할 때 허용되는 IP 주소 블록을 정의합니다. OpenShift Container Platform은spec.externalIP.autoAssignCIDRs
로 정의된 IP 주소 블록에 정책 규칙을 적용하지 않습니다.
올바르게 라우팅되면 구성된 외부 IP 주소 블록의 외부 트래픽이 서비스에서 노출하는 TCP 또는 UDP 포트를 통해 서비스 끝점에 도달할 수 있습니다.
클러스터 관리자는 OpenShiftSDN 및 OVN-Kubernetes 네트워크 유형 모두에서 externalIPs로 라우팅을 구성해야 합니다. 또한 할당하는 IP 주소 블록이 클러스터의 하나 이상의 노드에서 종료되어야 합니다. 자세한 내용은 Kubernetes 외부 IP를 참조하십시오.
OpenShift Container Platform에서는 IP 주소의 자동 및 수동 할당을 모두 지원하며 각 주소는 최대 하나의 서비스에 할당됩니다. 따라서 각 서비스는 다른 서비스에서 노출하는 포트와 관계없이 선택한 포트를 노출할 수 있습니다.
OpenShift Container Platform에서 autoAssignCIDR
로 정의된 IP 주소 블록을 사용하려면 호스트 네트워크에 필요한 IP 주소 할당 및 라우팅을 구성해야 합니다.
다음 YAML에서는 외부 IP 주소가 구성된 서비스를 설명합니다.
spec.externalIPs[]
가 설정된 Service
오브젝트의 예
apiVersion: v1 kind: Service metadata: name: http-service spec: clusterIP: 172.30.163.110 externalIPs: - 192.168.132.253 externalTrafficPolicy: Cluster ports: - name: highport nodePort: 31903 port: 30102 protocol: TCP targetPort: 30102 selector: app: web sessionAffinity: None type: LoadBalancer status: loadBalancer: ingress: - ip: 192.168.132.253
18.2.2.2. 외부 IP 주소 할당 제한 사항
클러스터 관리자는 허용 및 거부할 IP 주소 블록을 지정할 수 있습니다.
제한 사항은 cluster-admin
권한이 없는 사용자에게만 적용됩니다. 클러스터 관리자는 서비스 spec.externalIPs[]
필드를 IP 주소로 항상 설정할 수 있습니다.
spec.ExternalIP.policy
필드를 지정하여 정의된 policy
오브젝트를 사용하여 IP 주소 정책을 구성합니다. 정책 오브젝트의 형태는 다음과 같습니다.
{ "policy": { "allowedCIDRs": [], "rejectedCIDRs": [] } }
정책 제한을 구성할 때는 다음 규칙이 적용됩니다.
-
policy={}
가 설정된 경우spec.ExternalIPs[]
가 설정된Service
오브젝트를 생성할 수 없습니다. 이는 OpenShift Container Platform의 기본값입니다.policy=null
을 설정할 때의 동작은 동일합니다. policy
가 설정되고policy.allowedCIDRs[]
또는policy.rejectedCIDRs[]
가 설정된 경우 다음 규칙이 적용됩니다.-
allowedCIDRs[]
및rejectedCIDRs[]
가 둘 다 설정된 경우rejectedCIDRs[]
가allowedCIDRs[]
보다 우선합니다. -
allowedCIDRs[]
가 설정된 경우 지정된 IP 주소가 허용되는 경우에만spec.ExternalIPs[]
를 사용하여Service
를 생성할 수 있습니다. -
rejectedCIDRs[]
가 설정된 경우 지정된 IP 주소가 거부되지 않는 경우에만spec.ExternalIPs[]
를 사용하여Service
를 생성할 수 있습니다.
-
18.2.2.3. 정책 오브젝트의 예
다음 예제에서는 다양한 정책 구성을 보여줍니다.
다음 예에서 정책은 OpenShift Container Platform에서 외부 IP 주소가 지정된 서비스를 생성하지 못하도록 합니다.
Service
오브젝트spec.externalIPs[]
에 지정된 값을 거부하는 정책의 예apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: externalIP: policy: {} ...
다음 예에서는
allowedCIDRs
및rejectedCIDRs
필드가 모두 설정되어 있습니다.허용되거나 거부된 CIDR 블록을 모두 포함하는 정책의 예
apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: externalIP: policy: allowedCIDRs: - 172.16.66.10/23 rejectedCIDRs: - 172.16.66.10/24 ...
다음 예에서는
policy
가null
로 설정됩니다.null
로 설정하면oc get networks.config.openshift.io -o yaml
을 입력하여 구성 오브젝트를 검사할 때policy
필드가 출력에 표시되지 않습니다.Service
오브젝트spec.externalIPs[]
에 지정된 값을 허용하는 정책의 예apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: externalIP: policy: null ...
18.2.3. ExternalIP 주소 블록 구성
ExternalIP 주소 블록에 대한 구성은 cluster
라는 네트워크 CR(사용자 정의 리소스)에 의해 정의됩니다. 네트워크 CR은 config.openshift.io
API 그룹의 일부입니다.
CVO(Cluster Version Operator)는 클러스터를 설치하는 동안 cluster
라는 네트워크 CR을 자동으로 생성합니다. 이 유형의 다른 CR 오브젝트는 생성할 수 없습니다.
다음 YAML에서는 ExternalIP 구성을 설명합니다.
cluster
라는 Network.config.openshift.io CR
apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: externalIP: autoAssignCIDRs: [] 1 policy: 2 ...
다음 YAML에서는 policy
스탠자의 필드를 설명합니다.
Network.config.openshift.io policy
스탠자
policy: allowedCIDRs: [] 1 rejectedCIDRs: [] 2
외부 IP 구성의 예
외부 IP 주소 풀에 사용 가능한 몇 가지 구성이 다음 예에 표시되어 있습니다.
다음 YAML에서는 자동으로 할당된 외부 IP 주소를 사용하는 구성을 설명합니다.
spec.externalIP.autoAssignCIDRs
가 설정된 구성의 예apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: ... externalIP: autoAssignCIDRs: - 192.168.132.254/29
다음 YAML에서는 허용되거나 거부된 CIDR 범위에 대한 정책 규칙을 구성합니다.
spec.externalIP.policy
가 설정된 구성의 예apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: ... externalIP: policy: allowedCIDRs: - 192.168.132.0/29 - 192.168.132.8/29 rejectedCIDRs: - 192.168.132.7/32
18.2.4. 클러스터에 대한 외부 IP 주소 블록 구성
클러스터 관리자는 다음 ExternalIP 설정을 구성할 수 있습니다.
-
Service
오브젝트의spec.clusterIP
필드를 자동으로 채우도록 OpenShift Container Platform에서 사용하는 ExternalIP 주소 블록입니다. -
Service
오브젝트의spec.clusterIP
배열에 수동으로 할당할 수 있는 IP 주소를 제한하는 정책 오브젝트입니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
선택 사항: 현재 외부 IP 구성을 표시하려면 다음 명령을 입력합니다.
$ oc describe networks.config cluster
구성을 편집하려면 다음 명령을 입력합니다.
$ oc edit networks.config cluster
다음 예와 같이 ExternalIP 구성을 수정합니다.
apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: ... externalIP: 1 ...
- 1
externalIP
스탠자에 대한 구성을 지정합니다.
업데이트된 ExternalIP 구성을 확인하려면 다음 명령을 입력합니다.
$ oc get networks.config cluster -o go-template='{{.spec.externalIP}}{{"\n"}}'