在 Kubernetes Secret 中存储服务账号 Secret
本页面介绍了如何将 Apigee Hybrid 服务账号密钥存储在 Kubernetes Secret 中。将服务账号密钥存储在 Kubernetes Secret 中可增强安全性,并简化 Kubernetes 环境中的管理。将密钥存储在 Secret 中后,您无需将其存储在文件系统中。
服务账号
Hybrid 使用以下服务账号:
生产
apigee-cassandra
(对于 Google Cloud Storage 中的 Cassandra 备份和恢复,此参数为必需参数)apigee-logger
apigee-mart
apigee-metrics
apigee-mint-task-scheduler
(如果您使用的是 Monetization for Apigee Hybrid)apigee-runtime
apigee-synchronizer
apigee-udca
apigee-watcher
非生产
apigee-non-prod
准备工作
此过程使用两个可选的环境变量:$APIGEE_HELM_CHARTS_HOME
和 $PROJECT_ID
。如果您没有定义这些变量,请将代码示例中的每个变量替换为适当的值。
- 在
$APIGEE_HELM_CHARTS_HOME
目录中为服务账号密钥创建目录:mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
- 验证您是否可以执行
create-service-account
工具。如果您最近下载了图表,则create-service-account
文件可能尚未处于可执行模式。在$APIGEE_HELM_CHARTS_HOME
目录中,运行以下命令:$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --help
如果输出表明存在权限遭拒错误,请将该文件设为可执行文件。例如,在 Linux、macOS 或 UNIX 中使用
chmod
:chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account
创建服务账号密钥
使用 create-service-account
工具创建或更新服务账号,并下载密钥文件。此操作会为每个服务账号下载一个 JSON 文件。
服务账号密钥文件名将采用以下格式:
$PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json
生产
$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --env prod \ --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
非生产
$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --env non-prod \ --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
创建 Kubernetes Secret
创建 Kubernetes Secret 以存储服务账号密钥。
以下代码示例中的 kubectl create secret
命令具有以下结构:
kubectl create secret generic SECRET_NAME \ --from-file="client_secret.json=PATH_TO_SERVICE_ACCOUNT_KEY" \ -n APIGEE_NAMESPACE
生产
使用以下命令创建 Secret:
-
apigee-cassandra
(如果在 Cloud Storage 中安排备份)kubectl create secret generic apigee-cassandra-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-cassandra.json" \ -n APIGEE_NAMESPACE
-
apigee-logger
kubectl create secret generic apigee-logger-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-logger.json" \ -n APIGEE_NAMESPACE
-
apigee-mart
kubectl create secret generic apigee-mart-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mart.json" \ -n APIGEE_NAMESPACE
-
apigee-metrics
kubectl create secret generic apigee-metrics-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-metrics.json" \ -n APIGEE_NAMESPACE
-
apigee-mint-task-scheduler
(如果您使用的是 Monetization for Apigee Hybrid)kubectl create secret generic apigee-mint-task-scheduler-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mint-task-scheduler.json" \ -n APIGEE_NAMESPACE
-
apigee-runtime
kubectl create secret generic apigee-runtime-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-runtime.json" \ -n APIGEE_NAMESPACE
-
apigee-synchronizer
kubectl create secret generic apigee-synchronizer-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-synchronizer.json" \ -n APIGEE_NAMESPACE
-
apigee-udca
kubectl create secret generic apigee-udca-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-udca.json" \ -n APIGEE_NAMESPACE
-
apigee-watcher
kubectl create secret generic apigee-watcher-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-watcher.json" \ -n APIGEE_NAMESPACE
非生产
kubectl create secret generic apigee-non-prod-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-non-prod.json" \ -n APIGEE_NAMESPACE
在配置中引用服务账号密钥
将服务账号密钥存储为 Kubernetes Secret 后,请更新 Hybrid overrides.yaml
文件,以引用这些 Secret,而不是直接引用文件路径。修改相关的 serviceAccountPath
属性以使用 serviceAccountSecretRef
。
在 overrides.yaml
的相应部分中使用以下 serviceAccountSecretRefs
和 serviceAccountRef
配置:
生产
envs: - name: test serviceAccountSecretRefs: synchronizer: apigee-synchronizer-svc-account runtime: apigee-runtime-svc-account udca: apigee-udca-svc-account mart: serviceAccountRef: apigee-mart-svc-account # Use the same service account for mart.serviceAccountRef and connectAgent.serviceAccountRef connectAgent: serviceAccountRef: apigee-mart-svc-account # Use the same service account for mart.serviceAccountRef and connectAgent.serviceAccountRef logger: serviceAccountRef: apigee-logger-svc-account metrics: serviceAccountRef: apigee-metrics-svc-account udca: serviceAccountRef: apigee-udca-svc-account watcher: serviceAccountRef: apigee-watcher-svc-account # If Scheduling backups in Cloud Storage cassandra: backup: serviceAccountRef: apigee-cassandra-svc-account # If using Monetization for Apigee hybrid mintTaskScheduler: serviceAccountRef: apigee-mint-task-scheduler-svc-account
非生产
envs: - name: test-env serviceAccountSecretRefs: synchronizer: apigee-non-prod-svc-account runtime: apigee-non-prod-svc-account udca: apigee-non-prod-svc-account mart: serviceAccountRef: apigee-non-prod-svc-account connectAgent: serviceAccountRef: apigee-non-prod-svc-account logger: serviceAccountRef: apigee-non-prod-svc-account metrics: serviceAccountRef: apigee-non-prod-svc-account udca: serviceAccountRef: apigee-non-prod-svc-account watcher: serviceAccountRef: apigee-non-prod-svc-account # If Scheduling backups in Cloud Storage cassandra: backup: serviceAccountRef: apigee-non-prod-svc-account # If using Monetization for Apigee hybrid mintTaskScheduler: serviceAccountRef: apigee-non-prod-svc-account
应用配置更改
使用以下命令将更改应用于 apigee-telemetry
、apigee-org
和 apigee-env
图表:
-
升级 Apigee 遥测:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
升级 Apigee 组织:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
升级环境。
使用
--set env=
ENV_NAME 指定环境。 针对每个环境重复执行此命令。helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
后续步骤
- 详细了解 Hybrid 服务账号和角色。
- 请参阅 Hybrid 安装指南的创建服务账号部分。