NCP YAML 파일에는 모든 NCP 구성 요소를 구성, 설치 및 실행하기 위한 정보가 포함되어 있습니다.

NCP YAML 파일에는 다음 정보가 포함되어 있습니다.
  • RBAC 정의
  • 다양한 CRD(CustomResourceDefinitions)
  • NCP 전용 ncp.ini를 포함하는 ConfigMap. 일부 권장 구성 옵션은 이미 설정되어 있습니다.
  • NCP 배포
  • nsx-node-agent 전용 ncp.ini를 포함하는 ConfigMap. 일부 권장 구성 옵션은 이미 설정되어 있습니다.
  • nsx-node-agent, nsx-kube-proxy 및 nsx-ovs를 포함하는 nsx-node-agent DaemonSet.
  • nsx-ncp-bootstrap DaemonSet

NSX CNI 및 OpenvSwitch 커널 모듈은 nsx-ncp-bootstrap initContainers에 의해 자동으로 설치됩니다. OpenvSwitch 사용자 공간 데몬이 각 노드의 nsx-ovs 컨테이너에서 실행되고 있습니다.

NCP 배포 규격 업데이트

이름이 nsx-ncp-config인 ConfigMap을 찾습니다. ConfigMap 옵션의 전체 목록은 nsx-ncp-config ConfigMap의 내용을 참조하십시오. 일부 옵션은 이미 권장 값으로 구성되어 있습니다. 사용 환경에 맞게 모든 옵션을 사용자 지정할 수 있습니다. 예를 들면 다음과 같습니다.
  • 로그 수준 및 로그 디렉토리
  • Kubernetes API 서버 IP, 인증서 경로 및 클라이언트 토큰 경로. 기본적으로 환경 변수의 API 서버 ClusterIP가 사용되고 인증서 및 토큰은 ServiceAccount에서 자동으로 마운트됩니다. 일반적으로 변경은 필요하지 않습니다.
  • Kubernetes 클러스터 이름
  • NSX Manager IP 및 자격 증명
  • NSX 리소스 옵션(예: overlay_tz, top_tier_router, container_ip_blocks, external_ip_blocks 등)

기본적으로 Kubernetes 서비스 VIP/포트 및 ServiceAccount 토큰과 ca_file은 Kubernetes API 액세스에 사용됩니다. 여기서 변경은 필요하지 않지만 ncp.ini의 일부 NSX API 옵션을 채워야 합니다.

  • nsx_api_managers 옵션을 지정합니다. RFC3896과 호환되는 쉼표로 구분된 NSX Manager IP 주소 또는 URL 규격일 수 있습니다. 예를 들면 다음과 같습니다.
    nsx_api_managers = 192.168.1.181, 192.168.1.182, 192.168.1.183
  • 기본 인증을 사용하여 NSX-T에 연결하도록 NCP를 구성하는 경우, 각각 사용자 이름 및 암호와 함께 nsx_api_usernsx_api_password 옵션을 지정합니다. 이 인증 방법은 덜 안전하므로 권장되지 않습니다. NCP가 클라이언트 인증서를 사용하여 인증하도록 구성된 경우 이러한 옵션은 무시됩니다. 이러한 옵션은 NCP YAML 파일에 표시되지 않습니다. 따라서 수동으로 추가해야 합니다.
  • NSX-T에서 인증을 받기 위한 nsx_api_cert_filensx_api_private_key_file 옵션을 지정합니다. nsx_api_cert_file 옵션은 PEM 형식으로 나타낸 클라이언트 인증서 파일의 전체 경로입니다. 이 파일의 내용은 다음과 같아야 합니다.
    -----BEGIN CERTIFICATE-----
    <certificate_data_base64_encoded>
    -----END CERTIFICATE-----
    nsx_api_private_key_file 옵션은 PEM 형식의 클라이언트 개인 키 파일에 대한 전체 경로입니다. 이 파일의 내용은 다음과 같아야 합니다.
    -----BEGIN PRIVATE KEY-----
    <private_key_data_base64_encoded>
    -----END PRIVATE KEY-----

    NCP는 클라이언트 인증서 인증을 사용하여 해당 주체 ID로 NSX-T 개체를 생성할 수 있습니다. 즉, ID 이름이 동일한 ID가 있어야만 개체를 수정하거나 삭제할 수 있습니다. 따라서 NCP에서 생성된 NSX-T 개체를 실수로 수정하거나 삭제하는 문제를 방지할 수 있습니다. 관리자는 개체를 수정하거나 삭제할 수 있습니다. 주체 ID를 사용하여 개체가 생성되면 해당 내용의 경고가 표시됩니다.

  • (옵션) ca_file 옵션을 지정합니다. 이 값은 NSX Manager 서버 인증서를 확인하는 데 사용할 CA 번들 파일이어야 합니다. 설정하지 않으면 시스템 루트 CA가 사용됩니다. nsx_api_managers에 대해 하나의 IP 주소를 지정하면 하나의 CA 파일을 지정합니다. nsx_api_managers에 대해 3개의 IP 주소를 지정하면 하나 또는 3개의 CA 파일을 지정할 수 있습니다. 하나의 CA 파일을 지정하면 해당 파일이 모든 3개 관리자에 대해 사용됩니다. 3개의 CA 파일을 지정하면 각각 nsx_api_managers의 해당 IP 주소에 대해 사용됩니다. 예를 들면 다음과 같습니다.
       nsx_api_managers = 192.168.1.181,192.168.1.182,192.168.1.183
       ca_file = ca_file_for_all_mgrs
    or
       nsx_api_managers = 192.168.1.181,192.168.1.182,192.168.1.183
       ca_file = ca_file_for_mgr1,ca_file_for_mgr2,ca_file_for_mgr3
  • (옵션) insecure 옵션을 지정합니다. True로 설정하면 NSX Manager 서버 인증서가 확인되지 않습니다. 기본값은 False입니다.
Kubernetes 암호를 사용하여 NSX 클라이언트 인증서 및 로드 밸런서 기본 인증서를 저장하려면 먼저 kubectl 명령을 사용하여 암호를 생성한 다음, 배포 규격을 업데이트해야 합니다.
  • NCP 포드 규격에 암호 볼륨을 추가하거나 예제 Secrete 볼륨의 주석 처리를 제거합니다.
  • NCP 컨테이너 규격에 볼륨 마운트를 추가하거나 예제 볼륨 마운트의 주석 처리를 제거합니다.
  • ConfigMap에서 ncp를 업데이트하여 마운트된 볼륨의 파일을 가리키는 인증서 파일 경로를 설정합니다.

공유 Tier-1 토폴로지가 없는 경우 NCP가 Loadbalancer 서비스에 대해 Tier-1 게이트웨이 또는 라우터를 생성하도록 edge_cluster 옵션을 Edge 클러스터 ID로 설정해야 합니다. 시스템 > 패브릭 > 노드로 이동한 후 Edge 클러스터 탭을 선택하고 Edge 클러스터 이름을 클릭하여 Edge 클러스터 ID를 찾을 수 있습니다.

HA(고가용성)가 기본적으로 사용되도록 설정됩니다. 운영 환경에서는 HA를 사용하지 않도록 설정하지 않는 것이 좋습니다.

참고: 기본적으로 kube-scheduler는 마스터 노드의 포드를 스케줄링하지 않습니다. NCP YAML 파일에는 NCP 포드가 마스터 노드에서 실행할 수 있도록 하는 허용 항목이 추가되었습니다.

SNAT 구성

기본적으로 NCP는 모든 프로젝트에 대해 SNAT를 구성합니다. 다음 주석이 있는 네임스페이스에 대해서는 SNAT가 구성되지 않습니다.
ncp/no_snat: True
클러스터의 모든 네임스페이스에 대해 SNAT를 원하지 않는 경우 ncp.ini에서 다음 옵션을 구성합니다.
[coe]
enable_snat = False

참고: 기존 네임스페이스 SNAT 주석을 업데이트하는 것은 지원되지 않습니다. 이러한 작업을 수행하는 경우 오래된 SNAT 규칙이 남아 있을 수 있으므로 네임스페이스의 토폴로지가 일관되지 않은 상태가 됩니다. 일관되지 않은 상태에서 복구하려면 네임스페이스를 다시 생성해야 합니다.

(정책 모드에만 해당) 클러스터에 대해 SNAT가 구성되고, Tier-0 라우터의 BGP가 사용되도록 설정되고, Tier-0 라우터에 대해 경로 재배포를 구성할 때 Advertised tier-1 subnets 아래에서 Connected Interfaces & Segments를 선택하면 다음 옵션을 사용하여 경로 재배포를 제어할 수 있습니다.
[nsx_v3]
configure_t0_redistribution = True 

configure_t0_redistributionTrue로 설정되면 NCP는 다시 배포 규칙에 deny 경로 맵 항목을 추가하여 Tier-0 라우터가 클러스터의 내부 서브넷을 BGP 인접 네트워크로 보급하지 못하게 합니다. 이 기능은 주로 vSphere with Kubernetes 클러스터에 사용됩니다. 재배포 규칙에 대해 경로 맵을 생성하지 않으면 NCP가 해당 주체 ID를 사용하여 경로 맵을 생성하고 규칙에 적용합니다. 이 경로 맵을 수정하려면 새 경로 맵으로 교체하고, NCP 생성 경로 맵에서 항목을 복사하고, 새 항목을 추가해야 합니다. 새 항목과 NCP 생성 항목 간에 발생할 수 있는 충돌을 모두 관리해야 합니다. 재배포 규칙에 대한 새 경로 맵을 생성하지 않고 NCP 생성 경로 맵을 설정 해제하면 NCP가 다시 시작될 때 이전에 생성한 경로 맵이 다시 배포 규칙에 적용됩니다.

nsx-node-agent DaemonSet 규격 업데이트

이름이 nsx-node-agent-config인 ConfigMap을 찾습니다. ConfigMap 옵션의 전체 목록은 nsx-node-agent-config ConfigMap의 내용을 참조하십시오. 일부 옵션은 이미 권장 값으로 구성되어 있습니다. 사용 환경에 맞게 모든 옵션을 사용자 지정할 수 있습니다. 예를 들면 다음과 같습니다.
  • 로그 수준 및 로그 디렉토리
  • Kubernetes API 서버 IP, 인증서 경로 및 클라이언트 토큰 경로. 기본적으로 환경 변수의 API 서버 ClusterIP가 사용되고 인증서 및 토큰은 ServiceAccount에서 자동으로 마운트됩니다. 일반적으로 변경은 필요하지 않습니다.
  • OpenvSwitch 업링크 포트. 예: ovs_uplink_port=eth1
  • CNI의 MTU 값

CNI의 MTU 값을 설정하려면 nsx-node-agent ConfigMap에서 mtu 매개 변수를 수정하고 nsx-ncp-bootstrap 포드를 다시 시작합니다. 모든 노드의 포드 MTU가 업데이트됩니다. 이에 따라 노드 MTU도 업데이트해야 합니다. 노드와 포드 MTU가 일치하지 않으면 node-pod 통신(예: TCP 작동 여부 및 준비 프로브)에 영향을 줄 수 있습니다.

nsx-ncp-bootstrap DaemonSet은 노드에 CNI 및 OVS 커널 모듈을 설치합니다. 그런 다음, 노드에서 OVS 데몬을 종료하여 나중에 nsx-ovs 컨테이너가 Docker 컨테이너 내부에서 OVS 데몬을 실행할 수 있도록 합니다. CNI가 설치되어 있지 않으면 모든 Kubernetes 노드가 "준비되지 않음" 상태가 됩니다. 부트스트랩 DaemonSet에는 "준비되지 않음" 상태의 노드에서 실행될 수 있도록 하는 허용 항목이 있습니다. CNI 플러그인을 설치한 후 노드가 "준비" 상태가 됩니다.

NSX OVS 커널 모듈을 사용하지 않는 경우에는 OVS 커널 모듈을 컴파일하는 동안 볼륨 매개 변수 host-original-ovs-db를 OpenvSwitch 데이터베이스가 구성된 올바른 경로로 업데이트해야 합니다. 예를 들어 --sysconfdir=/var/lib를 지정하는 경우 host-original-ovs-db/var/lib/openvswitch로 설정합니다. 해당 경로를 가리키는 심볼 링크가 아니라 실제 OVS 데이터베이스의 경로를 사용해야 합니다.

NSX OVS 커널 모듈을 사용하는 경우 use_nsx_ovs_kernel_module = True를 설정하고 마운트할 볼륨 관련 줄의 주석 처리를 제거해야 합니다.

  # Uncomment these mounts if installing NSX-OVS kernel module
#   # mount host lib modules to install OVS kernel module if needed
#   - name: host-modules
#     mountPath: /lib/modules
#   # mount openvswitch database
#   - name: host-config-openvswitch
#     mountPath: /etc/openvswitch
#   - name: dir-tmp-usr-ovs-kmod-backup
#   # we move the usr kmod files to this dir temporarily before
#   # installing new OVS kmod and/or backing up existing OVS kmod backup
#     mountPath: /tmp/nsx_usr_ovs_kmod_backup

#   # mount linux headers for compiling OVS kmod
#   - name: host-usr-src
#     mountPath: /usr/src

...

# Uncomment these volumes if installing NSX-OVS kernel module
# - name: host-modules
#   hostPath:
#     path: /lib/modules
# - name: host-config-openvswitch
#   hostPath:
#     path: /etc/openvswitch
# - name: dir-tmp-usr-ovs-kmod-backup
#   hostPath:
#     path: /tmp/nsx_usr_ovs_kmod_backup

# - name: host-usr-src
#   hostPath:
#     path: /usr/src

NCP 3.1.1부터 hostPort가 지원됩니다. 포드에 대해 hostPort를 지정하려는 경우 nsx-node-agent-config ConfigMap의 [k8s] 섹션에서 enable_hostport_snatTrue로 설정하십시오. 동일한 ConfigMap에서 CNI 플러그인을 설치하는 경우 use_ncp_portmapFalse(기본값)로 설정해야 합니다. CNI 플러그인을 설치하지 않은 경우 NCP 이미지에서 portmap을 사용하려면 use_ncp_portmapTrue로 설정합니다.

SNAT는 hostIPhostPort 트래픽에 대한 소스 IP로 사용합니다. 포드에 대한 네트워크 정책이 있으며 포드의 hostPort에 액세스하려는 경우 네트워크 정책의 허용 규칙에 작업자 노드 IP 주소를 추가해야 합니다. 예를 들어 두 개의 작업자 노드(172.10.0.2 및 172.10.0.3)가 있는 경우 수신 규칙은 다음과 같아야 합니다.
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: test
    - podSelector:
        matchLabels:
          app: tea
    - ipBlock:
        cidr: 172.10.0.3/32
    - ipBlock:
        cidr: 172.10.0.2/32
    ...
NSX 노드 에이전트는 각 포드가 3개의 컨테이너를 실행하는 DaemonSet입니다.
  • nsx-node-agent는 컨테이너 네트워크 인터페이스를 관리합니다. 이 에이전트는 CNI 플러그인 및 Kubernetes API 서버와 상호 작용합니다.
  • nsx-kube-proxy는 클러스터 IP를 포드 IP로 변환하여 Kubernetes 서비스 추상화를 구현합니다. 업스트림 kube-proxy와 동일한 기능을 구현하지만 상호 배타적이지 않습니다.
  • nsx-ovs는 OpenvSwitch 사용자 공간 데몬을 실행합니다. 또한 OVS 브리지를 자동으로 생성하고 IP 주소와 경로를 node-if에서 br-int로 다시 이동합니다. ncp.ini에서 ovs_uplink_port=ethX를 추가하여 ethX을 OVS 브리지 업링크로 사용할 수 있도록 해야 합니다.

작업자 노드가 Ubuntu를 사용하고 있는 경우 ncp-ubuntu.yaml은 AppArmor 커널 모듈이 사용되도록 설정되어 있다고 가정하며, 그렇지 않은 경우 Kubelet는 DaemonSet 옵션으로 구성되어 있으므로 nsx-node-agent DaemonSet 실행을 거부합니다. Ubuntu 및 SUSE의 경우 기본적으로 이 모듈을 사용하도록 설정됩니다. 이 모듈을 사용하도록 설정했는지 확인하려면 /sys/module/apparmor/parameters/enabled 파일을 확인합니다.

AppArmor를 의도적으로 사용하지 않도록 설정한 경우 YAML 파일을 다음과 같이 변경해야 합니다.
  • AppArmor 옵션을 제거합니다.
    annotations:
        # The following line needs to be removed
        container.apparmor.security.beta.kubernetes.io/nsx-node-agent: localhost/node-agent-apparmor
  • nsx-node-agent 및 nsx-kube-proxy 컨테이너 둘 다에 대해 권한 있는 모드를 사용하도록 설정합니다.
    securityContext:
        # The following line needs to be appended
        privileged: true

참고: kubelet이 hyperkube 이미지를 사용하는 컨테이너 내에서 실행되는 경우, kubelet이 실제 상태와 관계없이 항상 AppArmor가 사용되지 않도록 설정된 것으로 보고합니다. 위와 동일하게 변경한 후 YAML 파일에 적용해야 합니다.

네임스페이스 이름 업데이트

YAML 파일에서 ServiceAccount, ConfigMap, Deployment와 같은 네임스페이스가 지정된 모든 개체는 nsx-system 네임스페이스 아래에 생성됩니다. 다른 네임스페이스를 사용하는 경우 nsx-system의 모든 인스턴스를 바꿉니다.