為何在建立叢集之後不存在 Ingress 子網域?

虛擬私有雲 經典基礎架構

您建立一個叢集,並執行 ibmcloud oc cluster get --cluster CLUSTER 來檢查其狀態。 叢集 Statenormal,但 Ingress SubdomainIngress Secret 無法使用。

即使叢集已處於 normal 狀態,Ingress 子網域和密碼也可能仍在建立中。 Ingress 子網域與密鑰的建立可能需要超過 15 分鐘才能完成:

標準叢集

  1. 工作者節點在 VLAN 上完全部署並準備就緒時,將訂購用於 VLAN 的可攜式公用子網路和可攜式專用子網路。
  2. 可攜式子網路訂購順利完成後,將使用可攜式公用 IP 位址和可攜式專用 IP 位址更新 ibm-cloud-provider-vlan-ip-config configmap。
  3. ibm-cloud-provider-vlan-ip-config 配置地圖更新時,會觸發 Ingress 控制器以建立對應的 Ingress。
  4. 會建立用於公開 Ingress 控制器的負載平衡器服務,並為其指派 IP 位址。
  5. 負載平衡器 IP 位址用於註冊 IBM NS1 中的 Ingress 子網域。 IBM NS1 在註冊過程中可能會出現延遲。

VPC 叢集

  1. 當您建立 VPC 叢集時,系統會自動在您的 VPC 中、叢集外部建立一個公有 VPC 負載平衡器與一個私有 VPC 負載平衡器。
  2. 每個區域會觸發一個公用 Ingress 控制器以進行建立。
  3. 會建立用於公開 Ingress 控制器的負載平衡器服務,並為其指派主機名稱。
  4. 負載平衡器主機名稱用於註冊 IBM NS1 中的 Ingress 子網域。 IBM NS1 在註冊過程中可能會出現延遲。

在刪除具有相同或類似名稱的叢集之後建立叢集? 請改為參閱 在您建立相同或類似名稱的叢集之後,沒有 Ingress 子網域存在

通常,叢集準備就緒後,將在 15 分鐘後建立 Ingress 子網域和密碼。 如果叢集處於 normal 狀態超過 15 分鐘後,而 Ingress 子網域和密碼仍然無法使用,可以遵循下列步驟來檢查建立程序的進度:

  1. 登入叢集。 因為子網域無法使用,Red Hat OpenShift 主控台無法開啟。 相反地,您可以透過 CLI 使用 --admin 選項來設定叢集環境定義。

    ibmcloud oc cluster config -c CLUSTER_NAME_OR_ID --admin
    
  2. 驗證工作者節點的 State 是否為 normal,以及 Status 是否為 Ready。 建立叢集後,工作者節點可能最長需要 20 分鐘才能準備就緒。

    ibmcloud oc worker ls -c CLUSTER_NAME_OR_ID
    

    輸出範例

    ID                                                     Public IP         Private IP      Flavor              State     Status   Zone    Version
    kube-blrs3b1d0p0p2f7haq0g-mycluster-default-000001f7   169.xx.xxx.xxx    10.xxx.xx.xxx   u3c.2x4.encrypted   deployed   Ready    dal10   1.35
    
  3. 驗證已完成建立 Ingress 控制器的必要步驟。

    • 經典叢集:查看「ibm-cloud-provider-vlan-ip-config」配置地圖的詳細資訊。
    oc describe cm ibm-cloud-provider-vlan-ip-config -n kube-system
    
    • 如果該 configmap 顯示 IP 位址,請繼續執行下一步。
    • 如果 Events 區段顯示類似於 ErrorSubnetLimitReached: There are already the maximum number of subnets permitted in this VLAN 的警告訊息,請參閱 VLAN 容量疑難排解主題

    移入有 IP 位址的 configmap 的輸出範例:

    NAME:         ibm-cloud-provider-vlan-ip-config
    Namespace:    kube-system
    Labels:       <none>
    Annotations:  <none>
    Data
    ====
    reserved_public_vlan_id:
    ----
    vlanipmap.json:
    ----
    {
        "vlans": [
        {
          "id": "2234947",
          "subnets": [
            {
              "id": "2215454",
              "ips": [
                "10.XXX.XXX.XXX",
                "10.XXX.XXX.XXX",
                "10.XXX.XXX.XXX",
                "10.XXX.XXX.XXX",
                "10.XXX.XXX.XXX"
              ],
              "is_public": false,
              "is_byoip": false,
              "cidr": "10.XXX.XXX.X/29"
            }
          ],
          "zone": "dal10",
          "region": "us-south"
        },
        {
          "id": "2234945",
          "subnets": [
            {
              "id": "2219170",
              "ips": [
                "169.XX.XXX.XX",
                "169.XX.XXX.XX",
                "169.XX.XXX.XX",
                "169.XX.XXX.XX",
                "169.XX.XXX.XX"
              ],
              "is_public": true,
              "is_byoip": false,
              "cidr": "169.XX.XXX.X/29"
            }
          ],
          "zone": "dal10",
          "region": "us-south"
        }
        ],
        "vlan_errors": [],
        "reserved_ips": []
    }
    cluster_id:
    ----
    bmnj1b1d09lpvv3oof0g
    reserved_private_ip:
    ----
    reserved_private_vlan_id:
    ----
    reserved_public_ip:
    ----
    Events:  <none>
    
    • VPC 叢集: 驗證 Ingress 控制器的 VPC 負載平衡器是否存在。 在輸出結果中,請尋找名稱kube-<cluster_ID> 開頭的 VPC 負載平衡器。 如果您未安裝 infrastructure-service 外掛程式,請執行 ibmcloud plugin install infrastructure-service 來安裝它。
    ibmcloud is load-balancers
    

    即使 VPC 負載平衡器已列出,其 DNS 記錄可能仍在註冊中。 建立 VPC 負載平衡器時,主機名稱會透過公用 DNS 登錄。 有時,此 DNS 記錄可能需要幾分鐘時間,才會同步到您的客戶所使用的特定 DNS 伺服器上。

  4. 驗證已順利建立 Ingress 控制器。

    1. 檢查叢集是否存在 Ingress 控制器部署。
      • 如果列出 Ingress 控制器部署,請繼續進行下一步。
      • 如果在幾分鐘之後未建立任何 Ingress 控制器部署,請 檢閱取得說明的方法
        oc get deployment -n openshift-ingress
        ```
        輸出範例
        ```sh {: screen}
        NAME             READY   UP-TO-DATE   AVAILABLE   AGE
        router-default   2/2     2            2           26m
        ```
    2. 請檢查 Ingress 控制器的負載平衡器服務是否存在,並獲指派公用外部 IP 位址 (標準叢集) 或主機名稱 (VPC 叢集)。
        * 如果列出名為 `router-default` 的服務,並獲指派 IP 位址 (標準叢集) 或主機名稱 (VPC 叢集),請繼續進行下一步。
        * 如果在幾分鐘之後未建立 `router-default` 服務,請 [檢閱取得協助的方式](/docs/openshift?topic=openshift-get-help)。
    
    ```sh {: pre}
        oc get svc -n openshift-ingress
        ```
        輸出範例
        ```sh {: screen}
        NAME                      TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGE
        router-default            LoadBalancer   172.21.47.119   169.XX.XX.XX   80:31182/TCP,443:31154/TCP   27m
        router-internal-default   ClusterIP      172.21.51.30    <none>         80/TCP,443/TCP,1936/TCP      26m
        ```
    
  5. 再次檢查 Ingress 子網域和密碼是否已建立。 如果它們無法使用,但您已驗證步驟 1-3 中的所有元件都存在,請 檢閱取得協助的方法

    ibmcloud oc cluster get -c CLUSTER_NAME_OR_ID