GKE Enterprise Ingress 控制器會管理 Compute Engine 資源。MultiClusterIngress
和 MultiClusterService
資源會對應至不同的 Compute Engine 資源,因此瞭解這些資源之間的關係有助於排解問題。舉例來說,請檢查下列 MultiClusterIngress
資源:
apiVersion: extensions/v1beta1
kind: MultiClusterIngress
metadata:
name: foo-ingress
spec:
template:
spec:
rules:
- host: store.foo.com
http:
paths:
- backend:
serviceName: store-foo
servicePort: 80
- host: search.foo.com
http:
paths:
- backend:
serviceName: search-foo
servicePort: 80
Compute Engine 對應至多叢集 Ingress 資源
下表顯示車隊資源與 Kubernetes 叢集和 Google Cloud中建立的資源之間的對應關係:
Kubernetes 資源 | Google Cloud 資源 | 說明 |
---|---|---|
MultiClusterIngress | 轉送規則 | HTTP(S) 負載平衡器 VIP。 |
目標 Proxy | 從註解和 TLS 區塊取得的 HTTP/S 終止設定。 | |
網址對應 | 規則區段中的虛擬主機路徑對應。 | |
MultiClusterService | Kubernetes 服務 | 從範本衍生的資源。 |
後端服務 | 系統會為每對 (Service、ServicePort) 建立後端服務。 | |
網路端點群組 | 參與服務的後端 Pod 組合。 |
檢查 Compute Engine 負載平衡器資源
建立負載平衡器後,Multi Cluster Ingress 狀態會包含為建構負載平衡器而建立的每個 Compute Engine 資源名稱。例如:
Name: shopping-service
Namespace: prod
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1beta1
Kind: MultiClusterIngress
Metadata:
Creation Timestamp: 2019-07-16T17:23:14Z
Finalizers:
mci.finalizer.networking.gke.io
Spec:
Template:
Spec:
Backend:
Service Name: shopping-service
Service Port: 80
Status:
VIP: 34.102.212.68
CloudResources:
Firewalls: "mci-l7"
ForwardingRules: "mci-abcdef-myforwardingrule"
TargetProxies: "mci-abcdef-mytargetproxy"
UrlMap: "mci-abcdef-myurlmap"
HealthChecks: "mci-abcdef-80-myhealthcheck"
BackendServices: "mci-abcdef-80-mybackendservice"
NetworkEndpointGroups: "k8s1-neg1", "k8s1-neg2", "k8s1-neg3"
VIP 未建立
如果沒有看到 VIP,表示建立時可能發生錯誤。 如要查看是否發生錯誤,請執行下列指令:
kubectl describe mci shopping-service
輸出內容可能如下所示:
Name: shopping-service
Namespace: prod
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1beta1
Kind: MultiClusterIngress
Metadata:
Creation Timestamp: 2019-07-16T17:23:14Z
Finalizers:
mci.finalizer.networking.gke.io
Spec:
Template:
Spec:
Backend:
Service Name: shopping-service
Service Port: 80
Status:
VIP: 34.102.212.68
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning SYNC 29s multi-cluster-ingress-controller error translating MCI prod/shopping-service: exceeded 4 retries with final error: error translating MCI prod/shopping-service: multiclusterservice prod/shopping-service does not exist
在這個範例中,錯誤是使用者未建立 MultiClusterIngress
參照的 MultiClusterService
資源。
502 回應
如果負載平衡器已取得 VIP,但持續提供 502 回應,可能是負載平衡器健康狀態檢查失敗。健康狀態檢查失敗的原因有兩種:
- 應用程式 Pod 狀況不佳 (請參閱雲端控制台偵錯範例)。
- 防火牆設定錯誤,導致 Google 健康狀態檢查工具無法執行健康狀態檢查。
如果是第 1 種情況,請確認應用程式確實在「/」路徑上提供 200 回應。
如果是第 2 種情況,請確認虛擬私有雲中有名為「mci-default-l7」的防火牆。Ingress 控制器會在虛擬私有雲中建立防火牆,確保 Google 健康狀態檢查程式可以連上後端。如果防火牆不存在,請確認沒有外部自動化程序會在防火牆建立後刪除。
流量未新增至叢集或從叢集移除
新增成員時,流量應會抵達基礎叢集中的後端 (如適用)。同樣地,如果移除成員資格,任何流量都不應抵達基礎叢集中的後端。如果沒有觀察到這種行為,請檢查 MultiClusterIngress
和 MultiClusterService
資源是否有錯誤。
如果 GKE 叢集不在 VPC 原生模式中,或您新增了 Membership,但未在 GKE 叢集中部署應用程式,就可能發生這項錯誤。
說明
MultiClusterService
:kubectl describe mcs zone-svc
說明
MultiClusterIngress
:kubectl describe mci zone-mci
設定叢集遷移作業
如要進一步瞭解遷移作業的用途,請參閱「設定叢集設計概念」。
如果處理不當,設定叢集遷移作業可能會造成中斷。執行設定叢集遷移作業時,請遵循下列準則:
- 請務必在
MultiClusterIngress
資源上使用靜態 IP 註解。否則遷移期間流量會中斷。遷移設定叢集時,系統會重新建立臨時 IP。 MultiClusterIngress
和MultiClusterService
資源的部署方式必須與現有和新的設定叢集完全相同。兩者之間的差異會導致新設定叢集中不同的MultiClusterService
和MultiClusterIngress
資源進行協調。- 任何時間都只能有一個設定叢集處於啟用狀態。在變更設定叢集之前,新設定叢集中的
MultiClusterIngress
和MultiClusterService
資源不會影響負載平衡器資源。
如要遷移設定叢集,請執行下列指令:
gcloud container fleet ingress update \
--config-membership=projects/project_id/locations/global/memberships/new_config_cluster
確認指令是否正常運作,方法是檢查「Feature state:」中是否沒有明顯錯誤:
gcloud container fleet ingress describe
控制台偵錯
在大多數情況下,檢查負載平衡器的確切狀態有助於偵錯。如要尋找負載平衡器,請前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
錯誤/警告代碼
Multi Cluster Ingress 會在 MultiClusterIngress
和 MultiClusterService
資源上發出錯誤和警告代碼,並在 gcloud multiclusteringress
「Description」欄位中顯示已知問題。這些訊息會記錄錯誤和警告代碼,方便您瞭解某個項目未如預期運作時的意義。每個代碼都包含採用 AVMBR123
格式的錯誤 ID,其中 123
是對應錯誤或警告的專屬編號,以及解決方法建議。
AVMBR101:Annotation [NAME] not recognized
如果 MultiClusterIngress
或 MultiClusterService
資訊清單中指定的註解無法辨識,就會顯示這項錯誤。系統可能無法辨識註解,原因如下:
多叢集 Ingress 不支援註解。如果註解的資源不應由 GKE Enterprise Ingress 控制器使用,這可能是預期行為。
系統支援註解,但拼字錯誤,因此無法辨識。
無論是哪種情況,請參閱說明文件,瞭解支援的註解和指定方式。
AVMBR102:[RESOURCE_NAME] not found
如果在 MultiClusterIngress
中指定補充資源,但 Config Membership 中找不到該資源,就會顯示這項錯誤。舉例來說,如果 MultiClusterIngress
參照的 MultiClusterService
不存在,或是 MultiClusterService
參照的 BackendConfig 不存在,就會擲回這項錯誤。找不到資源的原因有幾種:
- 不在適當的命名空間中。請確保相互參照的資源都位於相同的命名空間。
- 資源名稱拼字有誤。
- 資源確實不存在,且命名空間 + 名稱正確無誤。如果是這種情況,請建立該檔案。
AVMBR103:[CLUSTER_SELECTOR] is invalid
如果 MultiClusterService
上指定的叢集選取器無效,就會顯示這項錯誤。這個選取器可能無效的原因有以下幾種:
- 提供的字串含有錯字。
- 提供的字串參照的叢集成員資格已不存在於機群中。
AVMBR104:Cannot find NEGs for Service Port [SERVICE_PORT]
如果找不到特定 MultiClusterService
和服務通訊埠配對的 NetworkEndpointGroup (NEG),就會擲回這個錯誤。NEG 是包含每個後端叢集 Pod 端點的資源。NEG 可能不存在的主要原因是,後端叢集中的衍生服務在建立或更新時發生錯誤。如需更多資訊,請查看MultiClusterService
資源中的活動。
AVMBR105:Missing GKE Enterprise license.
這項錯誤會顯示在「功能狀態」下方,表示 GKE Enterprise API (anthos.googleapis.com) 未啟用。
AVMBR106:Derived service is invalid: [REASON].
這項錯誤會顯示在 MultiClusterService
資源的事件下方。造成這項錯誤的常見原因,是從 MultiClusterService
衍生而來的 Service 資源規格無效。
舉例來說,這個 MultiClusterService
的規格中未定義任何 ServicePort
。
apiVersion: networking.gke.io/v1
kind: MultiClusterService
metadata:
name: zone-mcs
namespace: whereami
spec:
clusters:
- link: "us-central1-a/gke-us"
- link: "europe-west1-c/gke-eu"
AVMBR107:Missing GKE cluster resource link in Membership.
這項錯誤會顯示在「功能狀態」下方,發生原因是成員資格資源沒有基礎 GKE 叢集。您可以執行下列指令來驗證這項設定:
gcloud container fleet memberships describe membership-name
並確保端點欄位下方沒有 GKE 叢集資源連結。
AVMBR108:GKE cluster [NAME] not found.
如果成員資格的基礎 GKE 叢集不存在,系統就會在「功能狀態」下方顯示這項錯誤。
AVMBR109:[NAME] is not a VPC-native GKE cluster.
這項錯誤會顯示在「功能狀態」下方。如果指定的 GKE 叢集是以路徑為基礎的叢集,系統會擲回這個錯誤。多叢集 Ingress 控制器會使用 NEG 建立容器原生負載平衡器。叢集必須是虛擬私有雲原生,才能使用容器原生負載平衡器。
詳情請參閱「建立虛擬私有雲原生叢集」。
AVMBR110:[IAM_PERMISSION] permission missing for GKE cluster [NAME].
這項錯誤會顯示在「功能狀態」下方。這項錯誤有幾種可能原因:
- 會員資格的基礎 GKE 叢集位於與會員資格本身不同的專案中。
- 已從
MultiClusterIngress
服務代理移除指定的 IAM 權限。
AVMBR111:Failed to get Config Membership: [REASON].
這項錯誤會顯示在「功能狀態」下方。發生這項錯誤的主要原因是,啟用功能時刪除了設定成員資格。
您絕不需要刪除設定成員資格。如要變更,請按照設定叢集遷移步驟操作。
AVMBR112:HTTPLoadBalancing Addon is disabled in GKE Cluster [NAME].
如果 GKE 叢集停用 HTTPLoadBalancing
外掛程式,系統就會在「功能狀態」下方顯示這項錯誤。您可以更新 GKE 叢集,啟用 HTTPLoadBalancing
外掛程式:
gcloud container clusters update name --update-addons=HttpLoadBalancing=ENABLED
AVMBR113:This resource is orphaned.
在某些情況下,資源的實用性取決於是否由其他資源參照。建立 Kubernetes 資源但未由其他資源參照時,系統會擲回這項錯誤。舉例來說,如果您建立的 BackendConfig
資源未由 MultiClusterService
參照,就會看到這則錯誤訊息。