3.6. 프라이빗 클러스터 설정
OpenShift Container Platform 버전 4.5 클러스터를 설치한 후 일부 핵심 구성 요소를 프라이빗으로 설정할 수 있습니다.
이 변경은 클라우드 공급자에게 프로비저닝한 인프라를 사용하는 클러스터에 대해서만 설정할 수 있습니다.
3.6.1. 프라이빗 클러스터 정보
기본적으로 OpenShift Container Platform은 공개적으로 액세스 가능한 DNS 및 엔드 포인트를 사용하여 프로비저닝됩니다. 클러스터를 배포 한 후 DNS, Ingress 컨트롤러 및 API 서버를 프라이빗으로 설정할 수 있습니다.
DNS
설치 프로그램이 프로비저닝한 인프라에 OpenShift Container Platform을 설치하는 경우 설치 프로그램은 기존 퍼블릭 영역에 레코드를 만들고 가능한 경우 클러스터 자체 DNS 확인을 위한 프라이빗 영역을 만듭니다. 퍼블릭 영역과 프라이빗 영역 모두에서 설치 프로그램 또는 클러스터는 API 서버에 대한 * .apps
, Ingress, api
의 DNS 항목을 만듭니다.
퍼블릭 영역과 프라이빗 영역의 * .apps
레코드는 동일하므로 퍼블릭 영역을 삭제하면 프라이빗 영역이 클러스터에 대한 모든 DNS 확인을 완벽하게 제공합니다.
Ingress 컨트롤러
기본 Ingress 개체는 퍼블릭으로 생성되기 때문에 로드 밸런서는 인터넷에 연결되어 퍼블릭 서브넷에서 사용됩니다. 기본 Ingress 컨트롤러를 내부 컨트롤러로 교체할 수 있습니다.
API 서버
기본적으로 설치 프로그램은 API 서버가 내부 트래픽 및 외부 트래픽 모두에 사용할 적절한 네트워크로드 밸런서를 만듭니다.
AWS (Amazon Web Services)에서 별도의 퍼블릭 및 프라이빗 로드 밸런서가 생성됩니다. 클러스터에서 사용하기 위해 내부 포트에서 추가 포트를 사용할 수 있다는 점을 제외하고 로드 밸런서는 동일합니다. 설치 프로그램이 API 서버 요구 사항에 따라 로드 밸런서를 자동으로 생성하거나 제거하더라도 클러스터는 이를 관리하거나 유지하지 않습니다. API 서버에 대한 클러스터의 액세스 권한을 유지하는 한 로드 밸런서를 수동으로 변경하거나 이동할 수 있습니다. 퍼블릭 로드 밸런서의 경우 포트 6443이 열려있고 상태 확인은 HTTPS의 / readyz
경로에 대해 설정되어 있습니다.
Google Cloud Platform에서 내부 및 외부 API 트래픽을 모두 관리하기 위해 단일 로드 밸런서가 생성되므로 로드 밸런서를 변경할 필요가 없습니다.
Microsoft Azure에서는 퍼블릭 및 프라이빗 로드 밸런서가 모두 생성됩니다. 그러나 현재 구현에 한계가 있기 때문에 프라이빗 클러스터에서 두 로드 밸런서를 유지합니다.
3.6.2. DNS를 프라이빗으로 설정
클러스터를 배포한 후 프라이빗 영역만 사용하도록 DNS를 변경할 수 있습니다.
프로세스
클러스터의 DNS 사용자 정의 리소스를 확인합니다.
$ oc get dnses.config.openshift.io/cluster -o yaml apiVersion: config.openshift.io/v1 kind: DNS metadata: creationTimestamp: "2019-10-25T18:27:09Z" generation: 2 name: cluster resourceVersion: "37966" selfLink: /apis/config.openshift.io/v1/dnses/cluster uid: 0e714746-f755-11f9-9cb1-02ff55d8f976 spec: baseDomain: <base_domain> privateZone: tags: Name: <infrastructureID>-int kubernetes.io/cluster/<infrastructureID>: owned publicZone: id: Z2XXXXXXXXXXA4 status: {}
spec
섹션에는 프라이빗 영역과 퍼블릭 영역이 모두 포함되어 있습니다.DNS 사용자 지정 리소스를 패치하여 퍼블릭 영역을 제거합니다.
$ oc patch dnses.config.openshift.io/cluster --type=merge --patch='{"spec": {"publicZone": null}}' dns.config.openshift.io/cluster patched
Ingress 컨트롤러는 Ingress 개체를 만들 때 DNS 정의를 참조하기 때문에 Ingress 개체를 만들거나 수정할 때 프라이빗 레코드만 생성됩니다.
중요퍼블릭 영역을 제거해도 기존 Ingress 개체의 DNS 레코드는 변경되지 않습니다.
선택 사항: 클러스터의 DNS 사용자 정의 리소스를 확인하고 퍼블릭 영역이 제거되었는지 확인하십시오.
$ oc get dnses.config.openshift.io/cluster -o yaml apiVersion: config.openshift.io/v1 kind: DNS metadata: creationTimestamp: "2019-10-25T18:27:09Z" generation: 2 name: cluster resourceVersion: "37966" selfLink: /apis/config.openshift.io/v1/dnses/cluster uid: 0e714746-f755-11f9-9cb1-02ff55d8f976 spec: baseDomain: <base_domain> privateZone: tags: Name: <infrastructureID>-int kubernetes.io/cluster/<infrastructureID>-wfpg4: owned status: {}
3.6.3. Ingress 컨트롤러를 프라이빗으로 설정
클러스터를 배포한 후 프라이빗 영역만 사용하도록 Ingress 컨트롤러를 변경할 수 있습니다.
프로세스
내부 엔드 포인트만 사용하도록 기본 Ingress 컨트롤러를 변경합니다.
$ oc replace --force --wait --filename - <<EOF apiVersion: operator.openshift.io/v1 kind: IngressController metadata: namespace: openshift-ingress-operator name: default spec: endpointPublishingStrategy: type: LoadBalancerService loadBalancer: scope: Internal EOF ingresscontroller.operator.openshift.io "default" deleted ingresscontroller.operator.openshift.io/default replaced
퍼블릭 DNS 항목이 제거되고 프라이빗 영역 항목이 업데이트됩니다.
3.6.4. API 서버를 프라이빗으로 제한
AWS (Amazon Web Services) 또는 Microsoft Azure에 클러스터를 배포한 후 프라이빗 영역만 사용하도록 API 서버를 재구성할 수 있습니다.
전제 조건
-
oc
로 알려진 OpenShift 명령 인터페이스 (CLI)를 설치합니다. -
admin
권한이 있는 사용자로 웹 콘솔에 액세스합니다.
프로세스
AWS 또는 Azure의 웹 포털 또는 콘솔에서 다음 작업을 수행합니다.
적절한 로드 밸런서 구성 요소를 찾아 삭제합니다.
- AWS의 경우 외부 로드 밸런서를 삭제합니다. 프라이빗 영역의 API DNS 항목은 동일한 설정을 사용하는 내부 로드 밸런서를 가리키므로 내부 로드 밸런서를 변경할 필요가 없습니다.
-
Azure의 경우 로드 밸런서의
api-internal
규칙을 삭제합니다.
-
퍼블릭 영역의
api.$clustername.$yourdomain
DNS 항목을 삭제합니다.
터미널에서 클러스터 시스템을 나열합니다.
$ oc get machine -n openshift-machine-api NAME STATE TYPE REGION ZONE AGE lk4pj-master-0 running m4.xlarge us-east-1 us-east-1a 17m lk4pj-master-1 running m4.xlarge us-east-1 us-east-1b 17m lk4pj-master-2 running m4.xlarge us-east-1 us-east-1a 17m lk4pj-worker-us-east-1a-5fzfj running m4.xlarge us-east-1 us-east-1a 15m lk4pj-worker-us-east-1a-vbghs running m4.xlarge us-east-1 us-east-1a 15m lk4pj-worker-us-east-1b-zgpzg running m4.xlarge us-east-1 us-east-1b 15m
다음 단계에서 이름에
master
가 포함된 컨트롤 플레인 시스템을 변경합니다.각 컨트롤 플레인 시스템에서 외부 로드 밸런서를 제거합니다.
master
시스템 개체를 편집하여 외부 로드 밸런서에 대한 참조를 제거합니다.$ oc edit machines -n openshift-machine-api <master_name> 1
- 1
- 변경할 컨트롤 플레인 또는 마스터 시스템의 이름을 지정합니다.
다음 예에 표시된 외부 로드 밸런서를 설명하는 행을 제거하고 개체 사양을 저장한 후 종료합니다.
... spec: providerSpec: value: ... loadBalancers: - name: lk4pj-ext 1 type: network 2 - name: lk4pj-int type: network
-
이름에
master
가 포함된 각 시스템에 대해 이 프로세스를 반복합니다.