設定 OpenShift 和 NCP 之前,請記下以下資訊。

  • 網繭的標籤不得超過 11 個,而命名空間的標籤則不得超過 12 個。

  • 新增供 OpenShift 內部使用的標籤 (例如,在索引鍵中具有首碼 openshift.io 的標籤) 將被 NCP 忽略,因此使用者將不會看見建立在相關 NSX 資源上的對應標籤。以下是 OpenShift 所使用的標籤首碼清單,您應避免使用以下列任一項開頭的標籤索引鍵:

        openshift.io
        pod-template
  • 節點將需要存取網繭,例如,用來進行 Kubelet 健全狀況檢查。請確定主機管理介面能夠存取網繭網路。

  • 攻擊者可以利用 Linux 功能 NET_ADMIN 和 NET_RAW 來入侵網繭網路。您應停用不受信任容器的這兩項功能。依預設並不會對受限和 anyuid SCC 授與 NET_ADMIN。請留意是否有任何 SCC 明確啟用了 NET_ADMIN,或是允許網繭在特殊權限模式下執行。此外,針對不受信任的容器,請根據 anyuid SCC (舉例而言) 建立移除 NET_RAW 功能的個別 SCC。此作業可藉由將 NET_RAW 新增至 SCC 定義中的「requiredDropCapabilities」清單來完成。

  • 允許網繭/容器中的根存取 (限用於測試)。下列命令將需要在您目前登入之 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
  • 其中缺少的 IPtables 防火牆規則可允許來自 Docker 預設橋接器容器的 DNS 要求傳送至節點上的 dnsmasq 程序。您必須手動加以開啟。請編輯 /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 節點 (重新啟動 kube-proxy 和 kubelet)。

        systemctl restart iptables
        systemctl restart docker
        systemctl restart origin-node
  • OpenShift 的內部 Docker 登錄必須能夠使用非 TLS 才能讓 OpenShift 正常運作。一般而言,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 - 網路原則中的規則子句可包含 namespaceSelectorpodSelectoripBlock 中的最多一個選取器。

  • Kubernetes API 伺服器不會執行網路原則規格驗證。可能會建立無效的網路原則。NCP 會拒絕此類網路原則。如果您更新該網路原則使其有效,NCP 仍不會處理該網路原則。您必須刪除該網路原則,並重新建立一個具有有效規格的網路原則。

  • 特定版本的 Kubernetes 具有與 subPath 相關的問題 (請參閱 https://github.com/kubernetes/kubernetes/issues/61076)。如果 OpenShift 版本不包含此問題的修正,NCP 網繭建立會失敗並顯示錯誤 CreateContainerConfigError: 無法準備 volumeMount 的子路徑。您可以從 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 目錄變成唯讀狀態。如此一來,使用憑證和私密金鑰連線 NSX-T 將無法運作,因為 NCP 無法在 /etc/nsx-ujo 下建立暫存檔以將憑證和私密金鑰移到單一檔案。

  • 如果您執行或升級至 OpenShift 3.10 叢集,請注意下列項目:

    • 您必須指定特定於 OpenShift 3.10 叢集的節點群組的組態。必須在詳細目錄 hosts 檔案中提供節點組態對應組態。

    • 必須將詳細目錄 hosts 檔案中 [nodes] 群組中定義的所有主機指派給節點群組名稱。

    • 從 Ansible 指導手冊升級 OpenShift 叢集可能會導致網路中斷。請確保在 openshift-ansible 存放庫上新增修補程式 (https://github.com/openshift/openshift-ansible/pull/8016/files#diff-2386e21861da3f95091dbb27d72ca366),以移除停止/解除安裝 Open vSwitch 套件。

  • 從 OpenShift 3.10 開始,kube-proxy 已從 openshift-node 服務移到 DaemonSet。依預設,不會再啟動它。執行下列步驟以手動啟動 kube-proxy (假設已複製 openshift-ansible 存放庫):

    • 前往 openshift-ansible 目錄,在 [defaults] 下設定下列項目:

          library = roles/lib_utils/library/
    • 透過下列項目在 playbooks 目錄中建立 create_proxy.yaml 檔案:

          - import_playbook: byo/openshift_facts.yml
          - hosts: masters
            run_once: True
            roles:
              - kube_proxy_and_dns
    • 執行 Playbook:

          ansible-playbook -i hosts playbooks/create_proxy.yaml

      您將看到錯誤訊息,指示部分作業失敗。可以忽略這些訊息。您可以透過執行命令 oc get po --all-namespaces 驗證結果。