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를 변경할 수 있습니다.

프로세스

  1. 클러스터의 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 섹션에는 프라이빗 영역과 퍼블릭 영역이 모두 포함되어 있습니다.

  2. 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 레코드는 변경되지 않습니다.

  3. 선택 사항: 클러스터의 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 컨트롤러를 변경할 수 있습니다.

프로세스

  1. 내부 엔드 포인트만 사용하도록 기본 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 권한이 있는 사용자로 웹 콘솔에 액세스합니다.

프로세스

  1. AWS 또는 Azure의 웹 포털 또는 콘솔에서 다음 작업을 수행합니다.

    1. 적절한 로드 밸런서 구성 요소를 찾아 삭제합니다.

      • AWS의 경우 외부 로드 밸런서를 삭제합니다. 프라이빗 영역의 API DNS 항목은 동일한 설정을 사용하는 내부 로드 밸런서를 가리키므로 내부 로드 밸런서를 변경할 필요가 없습니다.
      • Azure의 경우 로드 밸런서의 api-internal 규칙을 삭제합니다.
    2. 퍼블릭 영역의 api.$clustername.$yourdomain DNS 항목을 삭제합니다.
  2. 터미널에서 클러스터 시스템을 나열합니다.

    $ 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가 포함된 컨트롤 플레인 시스템을 변경합니다.

  3. 각 컨트롤 플레인 시스템에서 외부 로드 밸런서를 제거합니다.

    1. master 시스템 개체를 편집하여 외부 로드 밸런서에 대한 참조를 제거합니다.

      $ oc edit machines -n openshift-machine-api <master_name> 1
      1
      변경할 컨트롤 플레인 또는 마스터 시스템의 이름을 지정합니다.
    2. 다음 예에 표시된 외부 로드 밸런서를 설명하는 행을 제거하고 개체 사양을 저장한 후 종료합니다.

      ...
      spec:
        providerSpec:
          value:
          ...
            loadBalancers:
            - name: lk4pj-ext 1
              type: network 2
            - name: lk4pj-int
              type: network
      1 2
      이 줄을 삭제합니다.
    3. 이름에 master가 포함된 각 시스템에 대해 이 프로세스를 반복합니다.