本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
本页面介绍了为 Apigee Hybrid 安装和配置 Apigee Operator for Kubernetes 所需的步骤。如需详细了解使用适用于 Kubernetes 的 Apigee Operator 的优势,请参阅 适用于 Kubernetes 的 Apigee Operator 概览。
如果您未使用 Apigee Hybrid,请参阅安装适用于 Kubernetes 的 Apigee Operator,以安装适用于 Apigee 的 Apigee Operator for Kubernetes。
准备工作
在开始之前,请确保您具备以下各项:
所需的角色
如需获得设置安装和使用适用于 Kubernetes 的 Apigee Operator 所需资源所需的权限,请让管理员为您授予组织的以下 IAM 角色:
- 创建和管理服务账号:Service Account Admin(
roles/iam.serviceAccountAdmin
) - 创建和管理 Apigee 资源:Apigee Admin (
roles/apigee.admin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您也可以通过自定义角色或其他预定义角色来获取所需的权限。
所需的设置任务
在安装适用于 Kubernetes 的 Apigee Operator 之前,请务必完成以下任务,以设置使用该功能所需的资源:
- 使用 1.15.0 版或更高版本安装 Apigee Hybrid。如需了解安装 Apigee Hybrid 的说明,请参阅概览。
- 在支持 Istio 网关的云提供商(例如 Google Cloud、Azure 或 Amazon)中创建 Kubernetes 集群。
- 将 Istio Gateway 安装到您的 K8s 集群中:
- 对于 GKE 上的集群:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml
curl -L https://istio.io/downloadIstio | sh -
cd 1.6.11-asm.1
export PATH=$PWD/bin:$PATH
istioctl install --set profile=minimal --set values.global.platform=gke -y
- 对于其他提供商的集群:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml
curl -L https://istio.io/downloadIstio | sh -
cd 1.6.11-asm.1
export PATH=$PWD/bin:$PATH
istioctl install --set profile=minimal -y
- 对于 GKE 上的集群:
- 将 Istio 网关部署到 Kubernetes 集群中。
- 创建名为 gateway.yaml 的文件,其中包含以下内容,以部署包含以下内容的 Istio 网关:
#gateway.yaml apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: istio-gateway namespace: default annotations: service.beta.kubernetes.io/port_80_health-probe_protocol: tcp spec: gatewayClassName: istio listeners: - name: default hostname: "*.httpbin.com" port: 80 protocol: HTTP allowedRoutes: namespaces: from: All
- 使用以下命令将文件应用到集群:
kubectl apply -f gateway.yaml
- 创建名为 gateway.yaml 的文件,其中包含以下内容,以部署包含以下内容的 Istio 网关:
验证 Istio 网关设置(可选)
在本指南中,我们建议您在默认命名空间中部署一个 httpbin 应用示例,以测试您部署的网关。
- 将后端应用部署到 Kubernetes 集群,以测试网关。
- 创建名为
target.yaml
的新文件,并将以下内容添加到该新文件中kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin labels: app: httpbin service: httpbin spec: ports: - name: http port: 8000 targetPort: 8080 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: serviceAccountName: httpbin containers: - image: docker.io/mccutchen/go-httpbin:v2.15.0 imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 8080 EOF
- 将 HTTPRoute 资源部署到集群,以将来自网关的流量映射到您的后端服务。
在本指南中,我们建议您按照创建 HTTPRoute 中的步骤部署外部网关和 HTTPRoute。
如需详细了解 HTTPRoute 资源,请参阅部署 HTTPRoute(适用于内部网关)或创建 HTTPRoute(适用于外部网关)。
- 按照创建 HTTPRoute 中的说明,使用以下 YAML 配置创建 HTTPRoute:
apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: http-bin-route namespace: default spec: parentRefs: - name: istio-gateway namespace: default hostnames: ["example.httpbin.com"] rules: - matches: - path: type: PathPrefix value: /get backendRefs: - name: httpbin port: 8000
- 将文件应用到集群:
kubectl apply -f httproute.yaml
- 按照创建 HTTPRoute 中的说明,使用以下 YAML 配置创建 HTTPRoute:
- 验证 GKE Gateway 设置,以确认其运行状况是否符合预期。
- 使用以下命令获取网关详情
kubectl get gateway global-ext-lb1
您应该会看到类似如下所示的输出:
NAME CLASS ADDRESS PROGRAMMED AGE istio-gateway istio 34.54.193.72 True 11d
确认已为网关分配 IP 地址,并且
PROGRAMMED
的值为True
。 - 描述网关以确认路由已关联:
kubectl describe gateway istio-gateway
输出应类似如下所示:
... Listeners: Attached Routes: 1 Conditions: Last Transition Time: 2024-10-03T03:10:17Z ...
确认“关联的路由”的值为 1,表示路由已关联。
- 向网关发送请求
curl http://GATEWAY_IP_ADDRESS/get \ -H "Host: example.httpbin.com"
其中:GATEWAY_IP_ADDRESS 是网关的 IP 地址。您可以使用以下命令检索网关 IP 地址,其中 GATEWAY_NAME 是网关的名称:
kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses.value}"
例如:
curl http://34.54.193.72/get -H "Host: example.httpbin.com"
响应应类似如下所示:
{ "args": {}, "headers": { "Accept": "*/*", "Host": "http://example.httpbin.com", "User-Agent": "curl/8.7.1", "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701" }, "origin": "67.164.1.10,34.54.193.72", "url": "http://example.httpbin.com/get" }
- 使用以下命令获取网关详情
安装适用于 Kubernetes 的 Apigee 操作器
此过程介绍了安装和配置 Apigee Operator for Kubernetes 所需的步骤。
安装和配置适用于 Kubernetes 的 Apigee Operator
以下部分介绍了安装和配置 Apigee Operator for Kubernetes 所需的步骤:
- 设置环境变量。
- 创建并配置 APIM 服务账号。
- 安装适用于 Kubernetes 的 Apigee Operator。
- 创建 Apigee Hybrid 环境。
- 使用 Helm 安装 Apigee Hybrid 环境。
设置环境变量
在包含 Apigee 实例的 Google Cloud 项目中,使用以下命令设置环境变量:
export PROJECT_ID=PROJECT_ID
export APIGEE_ORG=APIGEE_ORG
其中:
- PROJECT_ID 是包含 Apigee Hybrid 实例的项目的 ID。
- APIGEE_ORG 是您的 Apigee Hybrid 实例的组织名称。
使用以下命令确认环境变量设置正确:
echo $PROJECT_ID $APIGEE_ORG
创建和配置 APIM 服务账号
创建服务账号以连接到 Apigee Hybrid 配置平面。
- 创建
apigee-apim-gsa
服务账号以连接到 Google Cloud 服务 - 使用以下命令向您创建的服务账号授予 Apigee 管理员角色。必须具有此角色才能创建和管理 Apigee 资源
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/apigee.admin"
- 下载服务账号的相应 JSON 密钥文件。
- 使用以下命令创建并下载
$PROJECT_ID-apigee-apim-gsa.json
密钥文件:gcloud iam service-accounts keys create $PROJECT_ID-apigee-apim-gsa.json \ --iam-account=apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com --project=$PROJECT_ID
- 验证文件是否已正确下载:
ls $PROJECT_ID-apigee-apim-gsa.json
- 使用以下命令创建并下载
gcloud iam service-accounts create apigee-apim-gsa
安装适用于 Kubernetes 的 Apigee 操作器
安装 Kubernetes 自定义资源定义 (CRD) 和 Apigee Operator for Kubernetes:
- 为 Apigee Operator for Kubernetes 创建命名空间
kubectl create namespace apim
- 安装 Apigee Operator for Kubernetes 自定义资源定义 (CRD):
helm install apigee-apim-crds -n apim \ oci://us-docker.pkg.dev/apigee-release/apigee-k8s-tooling-helm-charts/apigee-apim-operator-crds \ --version 1.1.0 \ --atomic
- 安装适用于 Kubernetes 的 Apigee Operator:
helm install apigee-apim-operator -n apim \ oci://us-docker.pkg.dev/apigee-release/apigee-k8s-tooling-helm-charts/apigee-apim-operator-helm \ --version 1.1.0 \ --set serviceAccount=apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com \ --set apigeeOrg=$APIGEE_ORG \ --set apigeeEnv=ENV_NAME \ --set-file serviceAccountKeyFileContent=$PROJECT_ID-apigee-apim-gsa-key.json \ --atomic
其中,ENV_NAME 是您要安装 Apigee Operator for Kubernetes 的 Apigee Hybrid 环境的名称。
- 确认安装已成功完成:
helm list -n apim
输出应类似如下所示:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION apigee-apim-crds apim 1 2025-09-01 00:17:03.399810627 +0000 UTC deployed apigee-apim-operator-crds-1.1.0 1.1.0 apigee-apim-operator apim 1 2025-09-01 00:15:00.362829981 +0000 UTC deployed apigee-apim-operator-helm-1.1.0 1.1.0
- 确认 Kubernetes 服务账号 (KSA) 已创建且包含所需的注解:
kubectl describe serviceaccounts apim-ksa -n apim
输出应类似如下所示:
Name: apim-ksa Namespace: apim ... Annotations: iam.gke.io/gcp-service-account: apigee-apim-gsa@my-project-id.iam.gserviceaccount.com
- 确认适用于 Kubernetes 的 Apigee Operator 已在集群的 Pod 中启动并正在运行:
kubectl get pods -n apim
输出应类似如下所示:
NAME READY STATUS RESTARTS AGE apigee-apim-operator-8559d4994b-h55fl 1/1 Running 0 8m34s
如果 STATUS 不是 Running,或者 READY 未显示 1/1,请参阅“排查 Apigee Operator for Kubernetes 问题”,以排查安装问题。
创建 Apigee Hybrid 环境
如需在 Apigee Hybrid 中使用适用于 Kubernetes 的 Apigee Operator,您必须创建一个带有特殊标志的环境,以用于服务扩展。
- 获取令牌以向 Apigee API 进行身份验证。
在命令行中,获取
gcloud
身份验证凭据,如以下示例所示:TOKEN=$(gcloud auth print-access-token)
如需检查是否已填充令牌,请使用
echo
,如以下示例所示:echo $TOKEN
这应该会以编码字符串的形式显示令牌。
如需了解详情,请参阅 gcloud 命令行工具概览。
- 使用以下命令之一创建环境:
- 对于 2021 年订阅组织:
curl -X POST "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments" -H \ "Authorization: Bearer $TOKEN" -H "content-type:application/json" \ -d '{ "name": "ENV_NAME", "displayName": "ENV_DISPLAY_NAME", "state": "ACTIVE", "deploymentType": "PROXY", "apiProxyType": "PROGRAMMABLE", "properties": { "property": [ { "name": "apigee-service-extension-enabled", "value": "true" } ] } }'
其中,ENV_NAME 是要创建的环境的名称。
- 对于 2024 年订阅组织和随用随付组织:
curl -i -X POST -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments" -H "Content-Type:application/json" -d '{ "name": "ENV_NAME", "displayName": "ENV_NAME", "state": "ACTIVE", "deploymentType": "PROXY", "apiProxyType": "PROGRAMMABLE", "type" : "ENV_TYPE", "properties": { "property": [ { "name": "apigee-service-extension-enabled", "value": "true" } ] } }'
其中:
- ENV_NAME 是您要创建的环境的名称。
- ENV_TYPE 是您要创建的环境的类型。例如
INTERMEDIATE
或COMPREHENSIVE
。
检查环境是否已成功创建:
curl -i -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments"
如需了解详情,请参阅 Apigee Hybrid 安装说明中的创建环境。
- 对于 2021 年订阅组织:
- 使用以下命令创建环境组:
curl -i -X POST -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/envgroups" -H "Content-Type:application/json" -d '{ "name": "'"$ENV_GROUP"'", "hostnames":["'"$DOMAIN"'"] }'
其中:
- ENV_GROUP (必需)环境名称可以包含小写字母、短划线和数字,并且必须以小写字母开头。此名称将用作标识符,创建后便无法更改。
- DOMAIN (必需)这是部署到该环境组中环境的所有代理都将使用的主机名。这应该是您管理的网域。地址可以是网域本身(例如 example.com),也可以包含子网域(例如 my-proxies.example.com)。如果您没有托管网域,则可以暂时输入占位符。您稍后可以更改网域地址。
如需了解详情,请参阅 Apigee Hybrid 安装说明中的创建环境组。
- 使用以下命令将环境附加到您刚刚创建的环境组:
curl -i -X POST -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/envgroups/$ENV_GROUP/attachments" -H "Content-Type:application/json" -d '{ "environment": "'"$ENV_NAME"'", }'
使用 Helm 安装 Apigee Hybrid 环境
在 Apigee Hybrid 集群中安装新环境的过程与在集群中安装其他环境的过程类似。这是必需的,以便将新的环境和环境组详细信息添加到安装了 Apigee Hybrid 的 Kubernetes 集群中。
- 使用以下命令为环境组网域生成 TLS 证书:
openssl req -nodes -new -x509 -keyout $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_$ENV_GROUP.key -out $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_$ENV_GROUP.pem -subj "/CN=$DOMAIN" -addext "subjectAltName = DNS:$DOMAIN" -days 3650
其中:
- APIGEE_HELM_CHARTS_HOME (必需)在 Apigee Hybrid 安装期间下载 Apigee Helm 图表的目录。
- 使用以下命令对 TLS 公共证书进行 Base64 编码:
cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_$ENV_GROUP.pem | base64 -w0 > $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_$ENV_GROUP.pem.base64
- 使用以下条目更新
overrides.yaml
文件中的 envs- name: ENV_NAME serviceAccountPaths: # Provide the path relative to the apigee-env chart directory. synchronizer: SYNCHRONIZER_SERVICE_ACCOUNT_FILEPATH # For example: "PROJECT_ID-apigee-synchronizer.json" runtime: RUNTIME_SERVICE_ACCOUNT_FILEPATH # For example: "PROJECT_ID-apigee-runtime.json" udca: UDCA_SERVICE_ACCOUNT_FILEPATH # For example: "PROJECT_ID-apigee-udca.json"
其中,*_SERVICE_ACCOUNT_FILEPATH (必需)是您在 Apigee Hybrid 安装期间使用的服务账号的 JSON 密钥文件,如需了解详情,请参阅 Apigee Hybrid 安装说明中的创建替换项。
- 在 overrides.yaml 文件中的 virtualhosts 下添加以下条目
- name:
selector: app: apigee-ingressgateway ingress_name: INGRESS_NAME sslCertPath: certs/keystore_$ENV_GROUP.pem sslKeyPath: certs/keystore_$ENV_GROUP.key 其中,INGRESS_NAME (必需)是部署的 Apigee 入站流量网关的名称,如需了解详情,请点击此处。
- 安装环境和环境组
-
安装环境。
一次只能安装一个环境。使用
--set env=
ENV_NAME 指定环境。如果您已在 shell 中设置 $ENV_NAME 环境变量,则可以在以下命令中使用该变量:试运行:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml \ --dry-run=server
ENV_RELEASE_NAME 是用于跟踪
apigee-env
图表的安装和升级情况的名称。此名称必须与安装中的其他 Helm 版本名称不同。 通常,这与ENV_NAME
相同。但是,如果环境与环境组具有相同的名称,则您必须为环境和环境组使用不同的版本名称,例如dev-env-release
和dev-envgroup-release
。如需详细了解 Helm 中的版本,请参阅 Helm 文档中的三大概念。安装图表:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml
通过检查相应环境的状态来验证它已启动并正在运行:
kubectl -n APIGEE_NAMESPACE get apigeeenv
NAME STATE AGE GATEWAYTYPE apigee-org1-dev-1 running 2d
-
安装环境组 (
virtualhosts
)。- 一次只能安装一个环境组 (virtualhost)。使用
--set envgroup=
ENV_GROUP 指定环境组。如果您已在 shell 中设置 $ENV_GROUP 环境变量,则可以在以下命令中使用该变量。对overrides.yaml
文件中提到的每个环境组重复运行以下命令:试运行:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=$ENV_GROUP \ -f overrides.yaml \ --dry-run=server
ENV_GROUP_RELEASE_NAME 是用于跟踪
apigee-virtualhosts
图表的安装和升级情况的名称。此名称必须与安装中的其他 Helm 版本名称不同。通常,这与ENV_GROUP
相同。但是,如果环境组与安装中的环境具有相同的名称,则必须为环境组和环境使用不同的版本名称,例如dev-envgroup-release
和dev-env-release
。如需详细了解 Helm 中的版本,请参阅 Helm 文档中的三大概念。安装图表:
helm upgrade $ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=$ENV_GROUP \ -f overrides.yaml
- 一次只能安装一个环境组 (virtualhost)。使用
您的 Apigee Hybrid 组织现在已准备就绪,并包含用于测试服务扩展程序的新环境。
继续执行创建
APIMExtensionPolicy
以创建扩展政策。 -
- 创建名为