OpenShift 및 NCP를 설치하기 전에 다음 정보를 기록하십시오.

  • 포드에는 11개 이하의 레이블이 있어야 하고 네임스페이스에는 12개 이하의 레이블이 있어야 합니다.

  • OpenShift 내부용으로 추가된 레이블, 예를 들어 접두사 openshift.io가 키에 포함된 레이블은 NCP에서 무시되므로 관련 NSX 리소스에 생성된 해당 태그가 사용자에게 표시되지 않습니다. 다음은 OpenShift에서 사용하는 레이블 접두사 목록으로, 다음 중 하나로 시작하는 레이블 키는 사용하지 않아야 합니다.

        openshift.io
        pod-template
  • 노드에는 포드에 대한 액세스 권한이 필요합니다(예: Kubelet 상태 검사). 호스트 관리 인터페이스에서 포드 네트워크에 액세스할 수 있는지 확인합니다.

  • Linux 기능인 NET_ADMIN 및 NET_RAW는 공격자가 포드 네트워크를 손상시키는 데 악용될 수 있습니다. 신뢰할 수 없는 컨테이너의 이러한 두 가지 기능을 사용하지 않도록 설정해야 합니다. 기본적으로, 제한된 anyuid SCC를 사용하면 NET_ADMIN이 부여되지 않습니다. NET_ADMIN을 명시적으로 사용하도록 설정하거나 포드가 권한 모드로 실행되도록 하는 SCC에 유의하십시오. 또한 신뢰할 수 없는 컨테이너의 경우, 예를 들어 NET_RAW 기능을 제거한 상태로 anyuid SCC를 기반의 별도 SCC를 생성합니다. 이 작업은 SCC 정의의 `requiredDropCapabilities` 목록에 NET_RAW를 추가하여 수행할 수 있습니다.

  • 포드/컨테이너에서 루트 액세스를 허용합니다(테스트 전용). 아래 명령을 실행하려면 현재 로그인된 oc 프로젝트의 모든 포드에서 루트 액세스 권한이 필요합니다.

        oc new-project test-project
        oc project test-project
        oc adm policy add-scc-to-user anyuid -z default
  • OpenShift 레지스트리를 구성(추가)합니다.

        oc login -u system:admin -n default
        oc adm registry --service-account=registry --config=/etc/origin/master/admin.kubeconfig
  • OpenShift 레지스트리 삭제

        oc login -u system:admin -n default
        oc delete svc/docker-registry dc/docker-registry
  • Docker 기본 브리지 컨테이너에서 노드의 dnsmasq 프로세스에 대한 DNS 요청을 허용하는 IPtables 방화벽 규칙이 없습니다. 따라서 수동으로 열어야 합니다. /etc/sysconfig/iptables를 편집하고 파일 맨 아래의 COMMIT 앞에 다음 규칙을 추가합니다.

        -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
        -A OS_FIREWALL_ALLOW -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
        COMMIT
  • iptables, docker 및 origin-node를 다시 시작합니다(kube-proxy 및 kubelet 다시 시작).

        systemctl restart iptables
        systemctl restart docker
        systemctl restart origin-node
  • OpenShift가 작동하려면 OpenShift의 내부 docker 레지스트리가 비 TLS를 사용하도록 허용되어야 합니다. 일반적으로는 OpenShift Ansible 설치 관리자에 의해 자동으로 추가되지만 현재 작동하지 않는 것 같습니다. /etc/sysconfig/docker를 편집하고 다음을 추가합니다.

        INSECURE_REGISTRY='--insecure-registry 172.30.0.0/16'
  • Docker를 다시 시작합니다.

    systemctl restart docker
  • NCP에서 지원하는 네트워크 정책은 Kubernetes에서 지원하는 네트워크 정책과 동일하며, 이는 OpenShift에 사용되는 Kubernetes 버전에 따라 다릅니다.

    • OpenShift 3.9 - 네트워크 정책의 규칙 절에 namespaceSelector, podSelectoripBlock 선택기를 최대 하나만 포함할 수 있습니다.

  • Kubernetes API 서버는 네트워크 정책 규격에 대한 검증을 수행하지 않습니다. 따라서 잘못된 네트워크 정책을 생성할 가능성이 있습니다. NCP는 이러한 네트워크 정책을 거부합니다. 네트워크 정책을 업데이트하여 올바르게 만들더라도 NCP가 해당 네트워크 정책을 처리하지 않습니다. 이 경우에는 네트워크 정책을 삭제한 후 규격이 올바른 네트워크 정책을 다시 생성해야 합니다.

  • 특정 버전의 Kubernetes에는 subPath 관련 문제가 있습니다(https://github.com/kubernetes/kubernetes/issues/61076 참조). 이 문제에 대한 수정이 OpenShift 버전에 포함되어 있지 않으면 CreateContainerConfigError: volumeMount를 위한 subPath를 준비하지 못했습니다. 오류가 발생하고 NCP 포드 생성이 실패합니다. 이 문제는 NCP yaml에서 subPath를 사용하지 않는 방법으로 해결할 수 있습니다. 예를 들어 subPath: ncp.ini가 포함된 줄을 제거하고 volumes에 대한 구성을 다음으로 교체합니다.

        volumes:
          - name: config-volume
            # ConfigMap nsx-ncp-config is expected to supply ncp.ini
            configMap:
              name: nsx-ncp-config
              items:
                - key: ncp.ini
                  path: ncp.ini

    이렇게 변경할 경우 전체 /etc/nsx-ujo 디렉토리가 읽기 전용이 된다는 단점이 있습니다. 그 결과, NCP가 인증서와 개인 키를 단일 파일로 이동하기 위한 임시 파일을 /etc/nsx-ujo 아래에 생성할 수 없기 때문에 인증서 및 개인 키를 사용하여 NSX-T에 연결할 수 없게 됩니다.

  • OpenShift 3.10 클러스터로 업그레이드하거나 현재 이 버전을 실행 중이면 다음을 참조하십시오.

    • OpenShift 3.10 클러스터에 맞는 노드 그룹 구성을 지정해야 합니다. 인벤토리 호스트 파일에 노드 구성 맵 구성을 제공해야 합니다.

    • 인벤토리 호스트 파일의 [nodes] 그룹에 정의된 모든 호스트를 노드 그룹 이름에 할당해야 합니다.

    • Ansible 플레이북에서 OpenShift 클러스터를 업그레이드하면 네트워크 손실이 발생할 수 있습니다. Open vSwitch 패키지가 중지/제거되지 않도록 Open openshift-ansible 저장소에 패치(https://github.com/openshift/openshift-ansible/pull/8016/files#diff-2386e21861da3f95091dbb27d72ca366)를 추가해야 합니다.

  • OpenShift 3.10부터는 kube-proxy가 openshift-node 서비스에서 DaemonSet로 이동했습니다. 이제 더 이상 기본적으로 시작되지 않습니다. kube-proxy를 수동으로 시작하려면 다음 단계를 수행합니다(openshift-ansible 리포지토리가 복제되었다고 가정함).

    • openshift-ansible 디렉토리로 이동하고 [defaults] 아래에서 다음을 설정합니다.

          library = roles/lib_utils/library/
    • 플레이북 디렉토리에서 다음 항목이 포함된 create_proxy.yaml 파일을 생성합니다.

          - import_playbook: byo/openshift_facts.yml
          - hosts: masters
            run_once: True
            roles:
              - kube_proxy_and_dns
    • 플레이북을 실행합니다.

          ansible-playbook -i hosts playbooks/create_proxy.yaml

      일부 작업이 실패했음을 나타내는 오류 메시지가 표시됩니다. 이러한 메시지는 무시할 수 있습니다. oc get po --all-namespaces 명령을 실행하여 결과를 확인할 수 있습니다.