Il file YAML di NCP contiene informazioni per configurare, installare ed eseguire tutti i componenti di NCP.

Il file YAML di NCP contiene le informazioni seguenti:
  • Definizioni del controllo degli accessi basato sui ruoli.
  • Vari CRD (CustomResourceDefinitions).
  • ConfigMap contenente il file ncp.ini dedicato a NCP. Alcune opzioni di configurazione consigliate sono già impostate.
  • Distribuzione di NCP.
  • ConfigMap contenente il file ncp.ini dedicato a nsx-node-agent. Alcune opzioni di configurazione consigliate sono già impostate.
  • <x-node-agent DaemonSet, inclusi nsx-node-agent, nsx-kube-proxy, e nsx-ovs.
  • DaemonSet nsx-ncp-bootstrap

I moduli del kernel CNI e OpenvSwitch di NSX vengono installati automaticamente da initContainer nsx-ncp-bootstrap. I daemon degli spazi utente OpenvSwitch sono in esecuzione nel container nsx-ovs in ogni nodo.

Aggiornamento delle specifiche di distribuzione di NCP

Individuare ConfigMap con il nome nsx-ncp-config. Per l'elenco completo delle opzioni di ConfigMap, vedere ConfigMap nsx-ncp-config. Per alcune opzioni sono già configurati i valori consigliati. È possibile personalizzare tutte le opzioni per il proprio ambiente. Ad esempio
  • Livello di registrazione e directory dei registri.
  • IP del server dell'API Kubernetes, percorso del certificato e percorso del token client. Per impostazione predefinita, viene utilizzato il valore ClusterIP del server API della variabile di ambiente e il certificato e il token vengono montati automaticamente da ServiceAccount. In genere non è necessaria alcuna modifica.
  • Nome cluster Kubernetes.
  • IP e credenziali di NSX Manager.
  • Opzioni di risorse NSX come overlay_tz, top_tier_router, container_ip_blocks, external_ip_blocks e così via.

Per impostazione predefinita, per l'accesso all'API Kubernetes vengono utilizzati il VIP/la porta e il token ServiceAccount del servizio Kubernetes, nonché ca_file. In questo caso non è necessaria alcuna modifica. ma è necessario compilare alcune opzioni di NSX API di ncp.ini.

  • Specificare l'opzione nsx_api_managers. Può essere un elenco di indirizzi IP o specifiche di URL di NSX Manager separati da virgola conformi a RFC3896. Ad esempio
    nsx_api_managers = 192.168.1.181, 192.168.1.182, 192.168.1.183
  • Se si configura NCP per la connessione a NSX-T tramite l'autenticazione di base, specificare le opzioni nsx_api_user e nsx_api_password con il nome utente e la password rispettivamente. Questo metodo di autenticazione non è consigliato perché è meno sicuro. Queste opzioni vengono ignorate se NCP è configurato per l'autenticazione tramite certificati client. Queste opzioni non vengono visualizzate nel file YAML di NCP. È necessario aggiungerle manualmente.
  • Specificare le opzioni nsx_api_cert_file e nsx_api_private_key_file per l'autenticazione con NSX-T. L'opzione nsx_api_cert_file è il percorso completo di un file di certificato client in formato PEM. Il contenuto di questo file dovrebbe essere simile al seguente:
    -----BEGIN CERTIFICATE-----
    <certificate_data_base64_encoded>
    -----END CERTIFICATE-----
    L'opzione nsx_api_private_key_file è il percorso completo di un file di chiave privata client in formato PEM. Il contenuto di questo file dovrebbe essere simile al seguente:
    -----BEGIN PRIVATE KEY-----
    <private_key_data_base64_encoded>
    -----END PRIVATE KEY-----

    Utilizzando l'autenticazione del certificato client, NCP può usare l'identità dell'entità per creare oggetti di NSX-T. Ciò significa che solo un'identità con lo stesso nome di identità può modificare o eliminare gli oggetti. In questo modo si impedisce la modifica o l'eliminazione accidentale degli oggetti di NSX-T creati da NCP. Si noti che un amministratore può modificare o eliminare qualsiasi oggetto. Se l'oggetto è stato creato con un'identità entità, viene visualizzato un avviso con queste informazioni.

  • (Facoltativo) Specificare l'opzione ca_file. Il valore deve essere un file di bundle dell'autorità di certificazione (CA) da utilizzare nella verifica del certificato del server di NSX Manager. Se non è impostato, verranno utilizzate le CA root del sistema. Se si specifica un indirizzo IP per nsx_api_managers, specificare un file CA. se si specificano tre indirizzi IP per nsx_api_managers, è possibile specificare uno o tre file CA. Se si specifica un file CA, verrà utilizzato per tutti e tre i gestori. Se si specificano tre file CA, ciascuno verrà utilizzato per l'indirizzo IP corrispondente in nsx_api_managers. Ad esempio
       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
  • (Facoltativo) Specificare l'opzione insecure. Se è impostata su True, il certificato del server di NSX Manager non viene verificato. Il valore predefinito è False.
Se si desidera utilizzare un segreto Kubernetes per archiviare il certificato client di NSX e il certificato predefinito del bilanciamento del carico, è innanzitutto necessario creare i segreti utilizzando un comando kubectl e quindi aggiornare le specifiche della distribuzione:
  • Aggiungere volumi del segreto alle specifiche del pod NCP o rimuovere il commento dai volumi del segreto di esempio.
  • Aggiungere montaggi del volume alle specifiche del container NCP o rimuovere i commenti dai montaggi del volume di esempio.
  • Aggiornare ncp.ini in ConfigMap per impostare il percorso del file del certificato che punta al file nel volume montato.

Se non si dispone di una topologia di livello 1 condivisa, è necessario impostare l'opzione edge_cluster sull'ID del cluster Edge in modo che NCP crei un gateway o un router di livello 1 per il servizio di bilanciamento del carico. È possibile individuare l'ID del cluster Edge passando a Sistema > Infrastruttura > Nodi, selezionando la scheda Cluster Edge e facendo clic sul nome del cluster Edge.

L'alta disponibilità (HA) è abilitata per impostazione predefinita. In un ambiente di produzione è consigliabile non disabilitare l'alta disponibilità.

Nota: per impostazione predefinita, kube-scheduler non pianifica i pod nel nodo master. Nel file YAML di NCP viene aggiunta una tolleranza per consentire l'esecuzione del pod NCP nel nodo master.

Configurazione di SNAT

Per impostazione predefinita, NCP configura SNAT per ogni progetto. SNAT non verrà configurato per gli spazi dei nomi con l'annotazione seguente:
ncp/no_snat: True
Se si preferisce non utilizzare SNAT per nessuno degli spazi dei nomi nel cluster, configurare l'opzione seguente in ncp.ini:
[coe]
enable_snat = False

Nota: l'aggiornamento di un'annotazione SNAT dello spazio dei nomi esistente non è supportato. Se si esegue tale azione, lo stato della topologia per lo spazio dei nomi sarà incoerente perché potrebbe rimanere una regola SNAT obsoleta. Per il ripristino dallo stato incoerente, è necessario ricreare lo spazio dei nomi.

(Solo modalità Criterio) Se SNAT è configurato per un cluster, BGP è abilitato nel router di livello 0 e in Advertised tier-1 subnets viene selezionato il valore Connected Interfaces & Segments, quando si configura la ridistribuzione della route per il router di livello 0, è possibile utilizzare l'opzione seguente per controllare la ridistribuzione della route:
[nsx_v3]
configure_t0_redistribution = True 

Se l'opzione configure_t0_redistribution è impostata su True, NCP aggiungerà una voce della mappa di routing deny nella regola di ridistribuzione per impedire che il router di livello 0 annunci le subnet interne del cluster ai router adiacenti BGP. Questa opzione viene utilizzata principalmente per i cluster di vSphere with Kubernetes. Se non si crea una mappa di routing per la regola di ridistribuzione, NCP creerà una mappa di routing utilizzando la sua identità entità e la applicherà alla regola. Se si desidera modificare questa mappa di routing, è necessario sostituirla con una nuova mappa di routing, copiare le voci della mappa di routing creata da NCP e aggiungere nuove voci. È necessario gestire eventuali conflitti tra le nuove voci e le voci create da NCP. Se si annulla semplicemente l'impostazione della mappa di routing creata da NCP senza creare una nuova mappa di routing per la regola di ridistribuzione, NCP applicherà nuovamente la mappa di routing creata in precedenza alla regola di ridistribuzione quando verrà riavviato.

Configurazione della corrispondenza del firewall per le regole NAT

A partire da NCP 3.2.1, è possibile utilizzare l'opzione natfirewallmatch per specificare il comportamento del firewall del gateway di NSX-T con le regole NAT create per uno spazio dei nomi Kubernetes. Questa opzione si applica solo agli spazi dei nomi Kubernetes appena creati e non agli spazi dei nomi esistenti. Questa opzione funziona solo in modalità Criterio.
[nsx_v3]
# This parameter indicate how firewall is applied to a traffic packet.
# Firewall can be bypassed, or be applied to external/internal address of
# NAT rule
# Choices: MATCH_EXTERNAL_ADDRESS MATCH_INTERNAL_ADDRESS BYPASS
#natfirewallmatch = MATCH_INTERNAL_ADDRESS

Aggiornamento delle specifiche del DaemonSet nsx-node-agent

Individuare ConfigMap con il nome nsx-node-agent-config. Per l'elenco completo delle opzioni di ConfigMap, vedere ConfigMap nsx-node-agent-config. Per alcune opzioni sono già configurati i valori consigliati. È possibile personalizzare tutte le opzioni per il proprio ambiente. Ad esempio
  • Livello di registrazione e directory dei registri.
  • IP del server dell'API Kubernetes, percorso del certificato e percorso del token client. Per impostazione predefinita, viene utilizzato il valore ClusterIP del server API della variabile di ambiente e il certificato e il token vengono montati automaticamente da ServiceAccount. In genere non è necessaria alcuna modifica.
  • Porta di uplink OpenvSwitch. Ad esempio: ovs_uplink_port=eth1
  • Valore MTU per CNI.

Per impostare il valore MTU per CNI, modificare il parametro mtu in ConfigMap di nsx-node-agent e riavviare i pod nsx-ncp-bootstrap. Il valore MTU del pod verrà aggiornato in ogni nodo. È inoltre necessario aggiornare il valore MTU del nodo di conseguenza. La mancata corrispondenza tra il valore MTU del nodo e del pod può causare problemi di comunicazione tra il nodo e il pod influendo ad esempio sui probe di attività e di idoneità di TCP.

Il DaemonSet nsx-ncp-bootstrap installa i moduli kernel CNI e OVS nel nodo. Arresta quindi i daemon OVS nel nodo, in modo che in seguito il container nsx-ovs possa eseguire i daemon OVS in un container Docker. Quando CNI non è installato, lo stato di tutti i nodi Kubernetes è "Non pronto". Nel DaemonSet di bootstrap è presente una tolleranza per consentire l'esecuzione nei nodi con stato "Non pronto". Dopo l'installazione del plug-in CNI, lo stato dei nodi diventa "Pronto".

Se non si utilizza il modulo kernel OVS di NSX, è necessario aggiornare il parametro di volume host-original-ovs-db con il percorso corretto della posizione in cui si trova il database OpenvSwitch durante la compilazione del modulo kernel OVS. Ad esempio, se si specifica --sysconfdir=/var/lib, impostare host-original-ovs-db su /var/lib/openvswitch. Assicurarsi di utilizzare il percorso del database OVS effettivo e non un link simbolico che punta a tale database.

Se si utilizza il modulo kernel OVS di NSX, è necessario impostare use_nsx_ovs_kernel_module = True e rimuovere i commenti dalle righe sui volumi da montare:

  # 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

Se si intende specificare hostPort per un pod, impostare enable_hostport_snat su True nella sezione [k8s] di ConfigMap di nsx-node-agent-config. Nella stessa ConfigMap, use_ncp_portmap deve essere impostato su False (il valore predefinito) se si installa un plug-in CNI. Se non si installa un plug-in CNI e si desidera utilizzare portmap dell'immagine NCP, impostare use_ncp_portmap su True.

SNAT utilizza hostIP come IP di origine per il traffico di hostPort. Si è presente un criterio di rete per un pod e si desidera accedere a hostPort di un pod, è necessario aggiungere gli indirizzi IP del nodo worker nella regola di autorizzazione del criterio di rete. Ad esempio, se sono presenti due nodi worker (172.10.0.2 e 172.10.0.3), la regola di ingresso deve essere simile a:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: test
    - podSelector:
        matchLabels:
          app: tea
    - ipBlock:
        cidr: 172.10.0.3/32
    - ipBlock:
        cidr: 172.10.0.2/32
    ...
L'agente del nodo di NSX è un DaemonSet in cui ogni pod esegue 3 container:
  • nsx-node-agent gestisce le interfacce di rete dei container. Interagisce con il plug-in CNI e il server dell'API di Kubernetes.
  • nsx-kube-proxy implementa l'astrazione del servizio Kubernetes convertendo gli IP dei cluster in IP dei pod. Implementa la stessa funzionalità di kube-proxy upstream, ma non si escludono a vicenda.
  • nsx-ovs esegue i daemon dello spazio utente OpenvSwitch. Crea anche il bridge OVS automaticamente e sposta l'indirizzo IP e le route nuovamente da node-if a br-int. È necessario aggiungere ovs_uplink_port=ethX in ncp.ini in modo che possa utilizzare ethX come uplink del bridge OVS.

Se i nodi worker utilizzano Ubuntu, ncp-ubuntu.yaml presuppone che il modulo kernel AppArmor sia abilitato. In caso contrario, Kubelet rifiuterà di eseguire il DaemonSet nsx-node-agent perché è configurato con l'opzione AppArmor. Per Ubuntu e SUSE, è abilitato per impostazione predefinita. Per verificare se il modulo è abilitato, controllare il file /sys/module/apparmor/parameters/enabled.

Se AppArmor viene disabilitato intenzionalmente, è necessario applicare le seguenti modifiche al file YAML:
  • Rimuovere l'opzione AppArmor:
    annotations:
        # The following line needs to be removed
        container.apparmor.security.beta.kubernetes.io/nsx-node-agent: localhost/node-agent-apparmor
  • Abilitare la modalità privilegiata per entrambi i container nsx-node-agent e nsx-kube-proxy:
    securityContext:
        # The following line needs to be appended
        privileged: true

Nota: se kubelet viene eseguito in un container che utilizza l'immagine hyperkube, kubelet segnalerà sempre che AppArmor è disabilitato indipendentemente dallo stato effettivo. Le stesse modifiche indicate sopra devono essere apportate e applicate al file YAML.

Aggiornamento del nome dello spazio dei nomi

Nel file YAML tutti gli oggetti con spazio dei nomi come ServiceAccount, ConfigMap e Deployment vengono creati sotto lo spazio dei nomi nsx-system. Se si utilizza uno spazio dei nomi diverso, sostituire tutte le istanze di nsx-system.

Abilitazione di backup e ripristino

NCP supporta la funzionalità di backup e ripristino in NSX-T. Le risorse supportate sono spazio dei nomi, pod e servizio.

Nota: NCP deve essere configurato in modalità Criterio.

Per abilitare questa funzionalità, impostare enable_restore su True in ncp.ini e riavviare NCP.
[k8s]
enable_restore = True
È possibile controllare lo stato di un ripristino con un comando della CLI di NSX. Ad esempio
nsxcli
> get ncp-restore status
NCP restore status is INITIAL

Lo stato può essere INITIAL, RUNNING o SUCCESS. INITIAL significa che la funzionalità di backup/ripristino è pronta, ma non è in esecuzione alcun ripristino. RUNNING significa che il processo di ripristino è in esecuzione in NCP. SUCCESS significa che un ripristino è stato completato correttamente. Se si verifica un errore durante un ripristino, NCP verrà riavviato automaticamente e verrà eseguito un nuovo tentativo. Se lo stato è RUNNING per un lungo periodo di tempo, verificare la presenza di eventuali messaggi di errore nel registro di NCP.