本頁內容適用於 Apigee,但不適用於 Apigee Hybrid。
查看
Apigee Edge 說明文件。
本頁說明安裝及設定 Kubernetes 適用的 Apigee APIM 運算子前,必須完成的步驟。如要進一步瞭解使用 APIM Operator 的優點,請參閱 Kubernetes 適用的 Apigee APIM Operator 總覽。
必要的角色
如要取得設定資源的必要權限,以便安裝及使用 APIM Operator,請要求管理員在機構中授予下列 IAM 角色:
-
建立及管理 Google Kubernetes Engine (GKE) 叢集:
容器管理員 (
roles/container.admin
) -
建立及管理服務帳戶:
服務帳戶管理員 (
roles/iam.serviceAccountAdmin
) -
建立及管理服務擴充功能:
Service Extensions 管理員 (
roles/networkservices.serviceExtensionsAdmin
) -
建立及管理網路端點群組 (NEG):
Compute 執行個體管理員 (
roles/compute.instanceAdmin
) -
建立及管理後端服務:
Compute 負載平衡器管理員 (
roles/compute.loadBalancerAdmin
) -
建立及管理 Apigee 資源:
Apigee 管理員 (
roles/apigee.admin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
必要設定工作
安裝 APIM 運算子前,請務必完成下列工作,設定使用這項功能所需的資源:
使用
1-15-0-apigee-4
以上版本佈建 Apigee 執行個體。您可以在 Google Cloud 控制台的 Apigee UI 中,前往「Instance details」(執行個體詳細資料) 頁面查看執行個體版本。前往 Google Cloud 控制台的「Instances」(執行個體) 頁面,選取執行個體並查看詳細資料:
您可以搭配「訂閱」或「即付即用」Pay-as-you-go Apigee 機構使用 APIM 運算子。如要進一步瞭解如何佈建付費 Apigee 執行個體,請參閱「事前準備」一文。
安裝 Google Cloud CLI。
安裝 Google Cloud CLI 後,請執行
gcloud components update
指令,取得最新版 gcloud 元件。- 安裝及設定
kubectl
指令列工具。 - 安裝 Helm (3.14.3 以上版本)。
使用 GKE 1.27 以上版本建立 GKE 叢集,並啟用 Workload Identity Federation for GKE 和 GKE Gateway。
如果現有叢集符合這些規定,可以略過這個步驟。
使用 Autopilot 模式建立及管理叢集時,系統預設會啟用 GKE 適用的工作負載身分聯盟。詳情請參閱「Autopilot 總覽」。
如要瞭解如何使用 Autopilot 建立啟用 Workload Identity Federation for GKE 和 GKE Gateway 的新叢集,請參閱「部署 Gateway」一文。
- 將 GKE 閘道部署至叢集。
您可以選擇設定及部署 內部閘道或外部閘道,搭配 APIM Operator 使用。如果您選擇部署內部閘道,則必須使用僅限 Proxy 的子網路和共用虛擬私有雲。如要測試本指南中的步驟,建議您部署外部閘道。 詳情請參閱 GKE 閘道控制器需求條件。
如要部署 GKE Gateway,請按照「部署外部 Gateway」一文的步驟操作。建立閘道時,請使用下列
yaml
設定:# gateway.yaml kind: Gateway apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: global-ext-lb1 namespace: default spec: gatewayClassName: gke-l7-global-external-managed listeners: - name: http protocol: HTTP allowedRoutes: kinds: - kind: HTTPRoute namespaces: from: All port: 80
將檔案套用至叢集:
kubectl apply -f gateway.yaml
- 將後端應用程式部署至叢集。
如要部署您建立及部署的
global-ext-lb1
Gateway 所公開的後端應用程式:- 建立名為
target.yaml
的新檔案。 - 將下列內容複製到新檔案中:
# target.yaml apiVersion: v1 kind: Namespace metadata: name: http --- apiVersion: v1 kind: ServiceAccount metadata: name: httpbin namespace: http --- apiVersion: v1 kind: Service metadata: name: httpbin namespace: http labels: app: httpbin service: httpbin spec: type: LoadBalancer ports: - name: https port: 80 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin namespace: http spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: serviceAccountName: httpbin containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80 resources: requests: cpu: 1 memory: 1024Mi limits: cpu: 1 memory: 1024Mi
- 將設定套用到叢集:
kubectl apply -f target.yaml
如要進一步瞭解如何將後端應用程式部署至 GKE 叢集,請參閱「部署範例應用程式」。
- 建立名為
- 將 HTTPRoute 資源部署至叢集,將來自 Gateway 的流量對應至後端服務。
如要進一步瞭解 HTTPRoute 資源,請參閱部署 HTTPRoute (適用於內部閘道) 或建立 HTTPRoute (適用於外部閘道)。
在本指南中,我們建議您按照「建立 HTTPRoute」一文中的步驟,部署外部閘道和 HTTPRoute。建立 HTTPRoute 時,請使用下列
yaml
設定,並將HOST_NAME
替換為要使用的主機名稱:# httproute.yaml kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: http-bin-route namespace: http spec: parentRefs: - kind: Gateway name: global-ext-lb1 namespace: default hostnames: - HOST_NAME rules: - matches: - path: value: / backendRefs: - name: httpbin kind: Service port: 80 namespace: http
將檔案套用至叢集:
kubectl apply -f httproute.yaml
- 確認 GKE Gateway 設定,確認設定運作正常。
- 使用下列指令取得閘道詳細資料:
kubectl get gateway global-ext-lb1
輸出應與以下內容類似:
NAME CLASS ADDRESS PROGRAMMED AGE global-ext-lb1 gke-l7-global-external-managed 34.54.193.72 True 11d
確認 IP 位址已指派給閘道,且
PROGRAMMED
的值為True
。 - 描述閘道,確認路徑已附加:
kubectl describe gateway global-ext-lb1
輸出內容應如下所示:
... Listeners: Attached Routes: 1 Conditions: Last Transition Time: 2024-10-03T03:10:17Z ...
確認
Attached Routes
的值為1
,表示路徑已附加。 - 將要求傳送至閘道:
curl http://GATEWAY_IP_ADDRESS/get \ -H "Host: HOST_NAME"
其中:
GATEWAY_IP_ADDRESS
是閘道的 IP 位址。 您可以使用下列指令擷取閘道 IP 位址,其中GATEWAY_NAME
是閘道的名稱:kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
是在 Gateway 的HTTPRoute
中定義的主機名稱。您可以使用下列指令擷取HOST_NAME
:kubectl get HTTPRoute HTTPROUTE_NAME -n NAMESPACE
For example:
curl http://34.54.193.72/get \ -H "Host: apigee-apim-operator-test.apigee.net"
回應內容應如下所示:
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701" }, "origin": "67.164.1.10,34.54.193.72", "url": "http://apigee-apim-operator-test.apigee.net/get" }
- 使用下列指令取得閘道詳細資料:
後續步驟
瞭解如何安裝 APIM 運算子。