本指南介绍了如何在与外界隔绝的 Google Distributed Cloud (GDC) 环境中安装和部署 Apigee Edge for Private Cloud 和 API 代理。经过网闸隔离的 GDC 产品(包括 Apigee Edge for Private Cloud)不需要连接到 Google Cloud 即可管理基础架构和服务。 您可以将本地控制平面托管在本地,以用于所有操作。如需简要了解 GDC 网闸隔离配置,请参阅概览。
本指南适用于熟悉 Apigee Edge 私有云并对 Kubernetes 有基本了解的 Apigee 运维人员。
所需步骤概览
如需在与外界隔绝的 GDC 环境中安装和部署 Apigee Edge for Private Cloud,操作员必须完成以下步骤:
- 获取适用于私有云的 Apigee Edge 的安装文件。
- 设置存储分区。
- 设置代码库节点。
- 部署 Apigee 节点。
- 设置控制节点。
- 配置 Ansible。
- 安装 Apigee 组件。
- 部署 pod 和服务。
- 更新上传器和 Fluent Bit 转发器的 IP。
- 为 Apigee 组织启用。
- 测试 HTTP 连接。
- 配置 TLS 并测试 HTTPS。
准备工作
在开始安装流程之前,请务必完成以下步骤:
- 如果您还没有 GDC 项目,请创建一个用于安装的项目。如需了解详情,请参阅创建项目。
- 在连接了 GDC 的工作站上或在组织的持续部署环境中,下载、安装和配置
gdcloud
CLI。 - 获取使用
gdcloud
CLI 和kubectl
API 所需的凭据。如需了解所需步骤,请参阅对账号进行身份验证以获取访问权限。 - 确认您从 Apigee 客户经理处收到的 Apigee 用户名和密码。
- 确认 GKE 管理员集群的名称和 GKE 用户集群的名称。
容量要求
在 GDC 上安装 Apigee Edge for Private Cloud 需要多个具有特定资源分配的虚拟机 (VM)。这些虚拟机会根据其计算资源(RAM、vCPU 核心)和本地磁盘存储空间产生费用。如需了解详情,请参阅价格。
下表显示了每个虚拟机的资源要求:
虚拟机类型 | RAM | vCPU 核心数 | 磁盘存储 |
---|---|---|---|
代码库节点 | 8 GB | 2 个 vCPU 核心 | 64GB |
控制节点 | 8 GB | 2 个 vCPU 核心 | 64GB |
Apigee API 管理节点 1、2 和 3 | 16GB RAM | 8 个 vCPU 核心 | 670 GB |
Apigee API 管理节点 4 和 5 | 16GB RAM | 8 个 vCPU 核心 | 500 GB - 1TB |
角色与权限
如需在完全隔离的 GDC 环境中部署 Apigee Edge 私有云,您需要具备以下角色和权限:
- 平台管理员 (PA):分配
IAM Admin
角色。 - 应用运维人员 (AO):分配以下角色:
Harbor Instance Admin
:拥有完全访问权限,可管理项目中的 Harbor 实例。LoggingTarget Creator
:在项目命名空间中创建LoggingTarget
自定义资源。LoggingTarget Editor
:在项目命名空间中修改LoggingTarget
自定义资源。Project Bucket Admin
:管理存储分区以及存储分区中的对象Project Grafana Viewer
:访问项目命名空间中的监控实例。Project NetworkPolicy Admin
:管理项目命名空间中的项目网络政策。Project VirtualMachine Admin
:管理项目命名空间中的虚拟机。Secret Admin
:管理项目中的 Kubernetes Secret。Service Configuration Admin
:对项目命名空间中的服务配置具有读取和写入权限。Namespace Admin
:管理项目命名空间中的所有资源。
- Apigee on GDC air-gapped 不附带 DNS 服务器,而是使用本地 DNS 解析作为解决方法。 如果 Apigee on GDC air-gapped 部署在具有外部 DNS 服务器的环境中,请将配置本地 DNS 的步骤替换为在 DNS 服务器中配置 DNS 条目的步骤。
- Apigee on GDC air-gapped 不包含独立的 SMTP 服务器。您可以随时配置 SMTP 服务器,以启用从管理服务器和管理界面发出的账号创建和密码重置出站电子邮件通知。管理 API 仍可用于 Apigee 用户账号管理。如需了解详情,请参阅配置 Edge SMTP 服务器。
- 经过网闸隔离的 Apigee on GDC 不会实现入侵检测和防御。安装并配置入侵防御系统 (IPS),例如 Snort,以检测和防范恶意活动。
- 操作系统:Rocky Linux 8
- 机器大小:8GB RAM;2 个 vCPU 核心;64GB 本地磁盘存储空间
- 连接:
- 入站:TCP 22 (SSH)
- 出站流量:互联网
- 请参阅 Apigee Edge 适用于私有云的版本说明,了解 GDC 支持的最新正式版(如“适用于私有云的 Edge”列中所述)。
- 下载 Edge 设置文件:
curl https://software.apigee.com/apigee/tarball/VERSION/rocky8/archive.tar -o /tmp/archive.tar -u 'APIGEE_USER:APIGEE_PASSWORD'
其中:
- APIGEE_USER 是您为 Apigee 组织收到的用户名。
- APIGEE_PASSWORD 是您收到的 Apigee 组织的密码。
- VERSION 是您打算在 GDC 上安装的 Apigee Edge for Private Cloud 发布版本,例如 4.53.01。
- 将最新的 Apigee Edge for Private Cloud
bootstrap_VERSION.sh
文件下载到/tmp/bootstrap_VERSION.sh
:curl https://software.apigee.com/bootstrap_VERSION.sh -o /tmp/bootstrap_VERSION.sh
其中,VERSION 是您打算在 GDC 上使用的最新 Apigee Edge for Private Cloud 发布版本,例如 4.53.01。
- 安装 Edge
apigee-service
实用程序和依赖项:sudo bash /tmp/bootstrap_VERSION.sh apigeeuser=APIGEE_USER apigeepassword=APIGEE_PASSWORD
其中:
- APIGEE_USER 是您为 Apigee 组织收到的用户名。
- APIGEE_PASSWORD 是您收到的 Apigee 组织的密码。
- VERSION 是您打算安装在 GDC 上的 Apigee Edge for Private Cloud 版本。
- 在连接的节点上运行设置脚本:
chmod a+x connected-node_setup.sh \ ./connected-node_setup.sh
在此步骤中,脚本会在以下位置生成所需的文件(例如,对于版本 4.53.01):
/opt/apigee/data/apigee-mirror/apigee-4.53.01.tar.gz
/tmp/apigee-nginx/apigee-nginx.tar
/tmp/fluentbit/fluentbit.tar
/tmp/postgresql14/postgresql14.tar
/tmp/ansible-rpms.tar
/tmp/apigee-repos.tar
- 通过 SSH 将所需文件从已连接的节点转移到本地机器:
mkdir apigee-files
cd apigee-files
for file in /opt/apigee/data/apigee-mirror/apigee-4.53.01.tar.gz /tmp/ansible-rpms.tar /tmp/apigee-nginx/apigee-nginx.tar /tmp/fluentbit/fluentbit.tar /tmp/postgresql14/postgresql14.tar /tmp/apigee-repos.tar; do scp -i SSH_PRIVATE_KEY_FILE USER@CONNECTED_NODE_IP:$file . done
其中:
- SSH_PRIVATE_KEY_FILE 是 SSH 私钥文件的路径。
- USER 是所连接节点的用户名。
- CONNECTED_NODE_IP 是所连接节点的 IP 地址。
- 向组织管理员集群进行身份验证:
gdcloud auth login --login-config-cert WEB_TLS_CERT
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
其中:
- WEB_TLS_CERT 是 Web TLS 证书的路径。
- ORG_ADMIN_CLUSTER 是组织管理员 GKE 集群的名称。
- 设置项目和存储分区环境变量:
export PROJECT=PROJECT
export BUCKET=BUCKET_NAME
其中:
- PROJECT 是您的 GDC 项目的名称。
- BUCKET_NAME 是您要创建的用于存储 Apigee Edge for Private Cloud 备份文件的存储分区的名称。
- 应用存储分区配置:
kubectl apply -f - <<EOF apiVersion: object.GDC.goog/v1 kind: Bucket metadata: name: $BUCKET namespace:$PROJECT spec: description: bucket for Apigee backup files storageClass: Standard bucketPolicy : lockingPolicy : defaultObjectRetentionDays: 30 EOF
此配置会创建一个保留期限为 30 天的存储分区。
- 在项目中创建服务账号:
gdcloud iam service-accounts create $BUCKET-sa \ --project=$PROJECT
- 创建角色和角色绑定,以生成用于访问相应存储分区的 Secret:
kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: $BUCKET-role namespace: $PROJECT rules: - apiGroups: - object.gdc.goog resourceNames: - $BUCKET resources: - buckets verbs: - get - read-object - write-object --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: $BUCKETrolebinding namespace: $PROJECT roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: $BUCKET-role subjects: - kind: ServiceAccount name: $BUCKET-sa namespace: $PROJECT EOF
- 从密钥中获取访问密钥 ID 和密钥:
export BUCKET_SECRET=$(kubectl get secret -n $PROJECT -o jsonpath="{range .items[*]}{.metadata.name}{':'}{.metadata.annotations['object\.GDC\.goog/subject']}{'\n'}{end}" | grep $BUCKET | tail -1 | cut -f1 -d :)
echo "access-key-id=$(kubectl get secret -n $PROJECT $BUCKET_SECRET -o jsonpath="{.data['access-key-id']}")"
echo "access-key=$(kubectl get secret -n $PROJECT $BUCKET_SECRET -o jsonpath="{.data['secret-access-key']}")"
输出应类似如下所示:
access-key-id=RFdJMzRROVdWWjFYNTJFTzJaTk0= access-key=U3dSdm5FRU5WdDhMckRMRW1QRGV0bE9MRHpCZ0Ntc0cxVFJQdktqdg==
- 创建供上传者在用户 GKE 集群中使用的 Secret:
- 向用户 GKE 集群进行身份验证:
gdcloud clusters get-credentials USER_CLUSTER
其中,USER_CLUSTER 是用户 GKE 集群的名称。
- 应用 Secret 配置:
kubectl apply -f - <<EOF apiVersion: v1 kind: Secret metadata: namespace: $PROJECT name: $BUCKET-secret type: Opaque data: access-key-id: ACCESS_KEY_ID access-key: ACCESS_KEY EOF
其中:
- ACCESS_KEY_ID 是在上一步中获得的访问密钥 ID。
- ACCESS_KEY 是在上一步中获得的访问密钥。
- 向用户 GKE 集群进行身份验证:
- 获取存储分区的存储端点、完全限定域名 (FQDN) 和区域:
- 向组织管理员集群进行身份验证:
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
其中,ORG_ADMIN_CLUSTER 是组织管理员 GKE 集群的名称。
- 获取存储分区的存储端点、完全限定域名 (FQDN) 和区域:
kubectl get buckets ${BUCKET} -n $PROJECT -o jsonpath="{'endpoint: '}{.status.endpoint}{'\n'}{'bucket: '}{.status.fullyQualifiedName}{'\n'}{'region: '}{.status.region}{'\n'}"
输出应类似如下所示:
endpoint: https://objectstorage.gpu-org.cookie.sesame.street bucket: ez9wo-apigee-backup-bucket region: cookie
- 向组织管理员集群进行身份验证:
- 更新
apigee/helm_user_cluster/values-cookie-air-gapped.yaml
文件中的以下值:objectstorekeyname: "apigee-backup-bucket-secret" objectstoreurl: "BUCKET_ENDPOINT" objectstorebucket: "BUCKET_FQDN"
其中:
- BUCKET_ENDPOINT 是在上一步中获得的存储分区的端点。
- BUCKET_FQDN 是在上一步中获取的存储分区的完全限定域名。
- 按如下方式更新
apigee/helm_user_cluster/values-cookie-air-gapped.yaml
:repo_node: enabled: true apigee_node: enabled: false control_node: enabled: false
确保
repo_node
已启用,且apigee_node
和control_node
均已停用。这些节点将在后续步骤中部署。 - 获取组织管理员集群的凭据:
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
其中,ORG_ADMIN_CLUSTER 是组织管理员 GKE 集群的名称。
- 创建 Python 虚拟环境:
python3 -m venv venv / source venv/bin/activate
- 运行部署脚本以创建代码库节点:
python apigee/solution_deploy.py gdc-air-gapped
- 为代码库节点配置 SSH:
export NODE=repo
kubectl create -n $PROJECT -f - <<EOF apiVersion: virtualmachine.GDC.goog/v1 kind: VirtualMachineAccessRequest metadata: generateName: $NODE- spec: ssh: key: | "cat SSH_PUBLIC_KEY_FILE" ttl: 24h user: admin vm: $NODE EOF
其中,SSH_PUBLIC_KEY_FILE 是包含 SSH 公钥的文件的名称。
- 获取代码库节点的外部 IP 地址:
kubectl get virtualmachineexternalaccess -n $PROJECT $NODE -ojsonpath='{.status.ingressIP}'
- 获取代码库节点的内部 IP 地址:
kubectl get virtualmachines.virtualmachine.gdc.goog -n $PROJECT $NODE -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'
apigee-4.53.01
apigee-nginx.tar
postgresql14.tar
fluentbit.tar
ansible-rpms.tar
apigee-repos.tar
- 将 SSH 私钥文件复制到代码库节点:
scp -i SSH_PRIVATE_KEY_FILE ~/apigee-files/* admin@REPO_EXTERNAL_IP:/tmp
其中:
- SSH_PRIVATE_KEY_FILE 是包含您的 SSH 私钥的文件的名称。
- REPO_EXTERNAL_IP 是在上一步中获得的代码库节点的外部 IP 地址。
- 将包含 Fluent Bit 配置的文件夹上传到代码库节点:
scp -i SSH-PRIVATE-KEY-FILE -r apigee/scripts/fluent-bit admin@REPO_EXTERNAL_IP:/tmp/fluent-bit
其中:
- SSH_PRIVATE_KEY_FILE 是包含您的 SSH 私钥的文件的名称。
- REPO_EXTERNAL_IP 是代码库节点的外部 IP 地址。
- 将
apigee/scripts/repo_setup.sh
复制到代码库节点。 - 在脚本中,将 REPO_USER 和 REPO_PASSWORD 替换为镜像代码库所需的用户名和密码。
- 运行脚本:
chmod a+x repo_setup.sh
./repo_setup.sh
如果您遇到
No such file or directory
错误,请重新运行脚本。 - 从代码库节点在本地测试与镜像代码库的连接。
curl http://REPO_USER:REPO_PASSWORD@REPO_INTERNAL_IP:3939/bootstrap_VERSION.sh -o /tmp/bootstrap_VERSION.sh
curl http://REPO_USER:REPO_PASSWORD@REPO_INTERNAL_IP:3939/apigee/release/VERSION/repodata/repomd.xml
将 VERSION 替换为您要安装的 Apigee Edge for Private Cloud 版本。
- 将
apigee/helm/scripts/apigee_setup.sh
中的REPO_INTERNAL_IP
、REPO_USER_NAME
和REPO_PASSWORD
替换为所需的值。 - 将这些值导出为环境变量:
export REPO_IP=REPO_INTERNAL_IP
export REPO_USER=REPO_USER_NAME
export REPO_PASSWORD=REPO_PASSWORD
- 在
apigee/helm/values-cookie-air-gapped.yaml
中启用apigee_node
,如下所示:apigee_node: enabled: true
- 运行部署脚本以创建 Apigee 节点:
source venv/bin/activate
python apigee/solution_deploy.py gdc-air-gapped
- 向组织管理员集群进行身份验证:
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
其中,ORG_ADMIN_CLUSTER 是组织管理员 GKE 集群的名称。
- 为每个节点创建 SSH 密钥:
for i in 1 2 3 4 5; do kubectl create -n $PROJECT -f - <<EOF apiVersion: virtualmachine.GDC.goog/v1 kind: VirtualMachineAccessRequest metadata: generateName: node$i spec: ssh: key: | "cat SSH_PUBLIC_KEY_FILE" ttl: 24h user: admin vm: node$i EOF done
其中,SSH_PUBLIC_KEY_FILE 是包含 SSH 公钥的文件的名称。
- 获取 Apigee 节点的外部 IP 地址:
for i in 1 2 3 4 5; do kubectl get virtualmachineexternalaccess -n $PROJECT node$i -ojsonpath='{.status.ingressIP}' echo done
- 获取 Apigee 节点的内部 IP 地址:
for i in 1 2 3 4 5; do kubectl get virtualmachines.virtualmachine.gdc.goog -n $PROJECT node$i -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}' echo done
- (可选)检查启动脚本是否在 Apigee 节点上成功运行:
- 通过 SSH 连接到相应节点,然后运行以下命令:
sudo journalctl -u cloud-final -f
- 查找类似如下的日志:
Aug 29 18:17:00 172.20.128.117 cloud-init[1895]: Complete! Aug 29 18:17:00 172.20.128.117 cloud-init[1895]: Finished running the command: . /var/lib/google/startup-scripts/apigee-setup
- 通过 SSH 连接到相应节点,然后运行以下命令:
- 将
apigee/helm/scripts/control_setup.sh
中的REPO_INTERNAL_IP
、REPO_USER_NAME
和REPO_PASSWORD
替换为所需的值。 - 在
apigee/helm/values-cookie-air-gapped.yaml
中启用control_node
,如下所示:control_node: enabled: true
- 运行部署脚本以创建控制节点:
source venv/bin/activate
python apigee/solution_deploy.py gdc-air-gapped
- 配置对控制节点的 SSH 访问权限:
kubectl create -n $PROJECT -f - <<EOF apiVersion: virtualmachine.GDC.goog/v1 kind: VirtualMachineAccessRequest metadata: generateName: control- spec: ssh: key: | "cat SSH_PUBLIC_KEY_FILE" ttl: 24h user: admin vm: control EOF
- 获取控制节点的外部 IP 地址:
kubectl get virtualmachineexternalaccess -n $PROJECT control -ojsonpath='{.status.ingressIP}'
- 获取控制节点的内部 IP:
kubectl get virtualmachines.virtualmachine.GDC.goog -n $PROJECT control -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'
- 通过 SSH 连接到控制节点并设置 Ansible 环境:
cd /home/admin
cp -r /tmp/apigee-repos .
cd apigee-repos/ansible-opdk-accelerator/setup
- 将远程 Git 代码库替换为本地文件:
sed -i 's/https:\/\/github.com\/carlosfrias/git+file:\/\/\/home\/admin\/apigee-repos/g' requirements.yml
sed -i 's/\.git$//g' requirements.yml
- Install Ansible requirements:
sudo chown -R admin /home/admin/apigee-repos
ansible-galaxy install -r requirements.yml -f
- 更新设置配置:
- 修改
main.yml
文件:vi ~/apigee-repos/ansible-opdk-accelerator/setup/roles/apigee-opdk-setup-ansible-controller/tasks/main.yml
- 移除需要 GitHub 访问权限的任务:
- 通过 Git SSH 签出配置代码库
- 通过 Git HTTPS 签出配置代码库
- 运行设置 playbook:
cd ~/apigee-repos/ansible-opdk-accelerator/setup
ansible-playbook setup.yml
- 修改
- 将 Apigee 节点的 SSH 密钥上传到控制节点:
scp -i CONTROL_SSH_PRIVATE_KEY_FILE APIGEE_NODE_SSH_PRIVATE_KEY_FILE admin@CONTROL_EXTERNAL_IP:/home/admin/.ssh/id_rsa
其中:
- CONTROL_SSH_PRIVATE_KEY_FILE 是包含控制节点 SSH 私钥的文件的名称。
- APIGEE_NODE_SSH_PRIVATE_KEY_FILE 是包含 Apigee 节点的 SSH 私钥的文件的名称。
- CONTROL_EXTERNAL_IP 是控制节点的外部 IP 地址。
- 创建 Ansible 清单配置文件:
- 将
apigee/scripts/ansible/prod.cfg
文件的内容复制到prod.cfg
文件中:vi ~/.ansible/multi-planet-configurations/prod.cfg
- 创建
edge-dc1
文件夹,并将apigee/scripts/ansible/edge-dc1
文件的内容复制到edge-dc1
文件中:mkdir ~/.ansible/inventory/prod
vi ~/.ansible/inventory/prod/edge-dc1
- 将
- 更新
edge-dc1
中 Apigee 节点的内部 IP 地址:apigee_000 ansible_host=APIGEE_NODE1_INTERNAL_IP
apigee_001 ansible_host=APIGEE_NODE2_INTERNAL_IP
apigee_002 ansible_host=APIGEE_NODE3_INTERNAL_IP
apigee_003 ansible_host=APIGEE_NODE4_INTERNAL_IP
apigee_004 ansible_host=APIGEE_NODE5_INTERNAL_IP
其中,APIGEE_NODE*_INTERNAL_IP 的值是在前面步骤中获得的 Apigee 节点的内部 IP 地址。
- 使用以下值配置
~/.apigee-secure/credentials.yml
文件:- apigee_repo_user: 'APIGEE_REPO_USER'
- apigee_repo_password: 'APIGEE_REPO_PASSWORD'
- opdk_qpid_mgmt_username: 'OPDK_QPID_MGMT_USERNAME'
- opdk_qpid_mgmt_password: 'OPDK_QPID_MGMT_PASSWORD'
其中:
- APIGEE_REPO_USER 是 Apigee 代码库的用户名。
- APIGEE_REPO_PASSWORD 是 Apigee 代码库的密码。
- OPDK_QPID_MGMT_USERNAME 是 Apigee QPID 管理服务器的用户名。
- OPDK_QPID_MGMT_PASSWORD 是 Apigee QPID 管理服务器的密码。
- 添加包含有效 Apigee Edge 许可文件的许可文件。文件的名称必须为
license.txt
。 - 将
~/.apigee-secure/license.txt
文件的内容复制到您刚刚创建的license.txt
中。 - 在
~/.apigee/custom-properties.yml
文件中配置以下值:- opdk_version: 'OPDK_VERSION'
- apigee_repo_url: 'APIGEE_REPO_URL'
其中:
- OPDK_VERSION 是您要安装的 Apigee Edge for Private Cloud 版本。
- APIGEE_REPO_URL 是 Apigee 代码库的网址。
- 将配置文件导出为环境变量:
export ANSIBLE_CONFIG=~/.ansible/multi-planet-configurations/prod.cfg
- 将远程 Git 代码库替换为本地文件:
cd ~/apigee-repos/ansible-opdk-accelerator/installations/multi-node/
sed -i 's/https:\/\/github.com\/carlosfrias/git+file:\/\/\/home\/admin\/apigee-repos/g' requirements.yml
sed -i 's/\.git$//g' requirements.yml
- 安装 Ansible 要求:
ansible-galaxy install -r requirements.yml -f
- 修补 Ansible 角色:
sed -i 's/private_address/inventory_hostname/g' ~/.ansible/roles/apigee-opdk-settings-cassandra/tasks/main.yml
sed -i 's/include/include_tasks/g' ~/.ansible/roles/apigee-opdk-server-self/tasks/main.yml
sed -i 's/include/include_tasks/g' ~/.ansible/roles/apigee-opdk-setup-silent-installation-config/tasks/main.yml
cat << EOF >> ~/.ansible/roles/apigee-opdk-setup-silent-installation-config/templates/response-file-template.conf.j2 QPID_MGMT_USERNAME= opdk_qpid_mgmt_username QPID_MGMT_PASSWORD= opdk_qpid_mgmt_password EOF
sed -i 's/mode: 0700/mode: 0700\n recurse: yes/g' ~/.ansible/roles/apigee-opdk-setup-postgres-config/tasks/main.yml
- 将
install.yml
文件的内容替换为apigee/scripts/ansible/install.yml
中的内容。 - 运行 playbook 以安装 Apigee 组件:
ansible-playbook install.yml
- 在 Edge 界面中停用用户的密码重置链接。Apigee on GDC air-gapped 不包含 SMTP 服务器。按照 Edge 界面 中的步骤停用密码重置链接。
- 按照
创建 Harbor 注册表实例中的说明在 GDC 项目
dev-apigee
中创建 Harbor 实例。 - 按照
创建 Harbor 项目中的说明创建一个名为
apigee
的 Harbor 项目。 - 按照配置访问权限控制中的说明为 Harbor 项目设置访问权限控制。
- 按照登录 Docker 和 Helm 中的说明配置 Docker 身份验证。
- 更新
apigee/apigee_user_cluster.toml
文件中的 IP 地址,如下所示:mgmt-server-proxy = "APIGEE_NODE1_EXTERNAL_IP" router-proxy1 = "APIGEE_NODE2_EXTERNAL_IP" router-proxy2 = "APIGEE_NODE3_EXTERNAL_IP"
其中:
- APIGEE_NODE1_EXTERNAL_IP 是在前面步骤中获得的 Apigee 节点 1 的外部 IP 地址。
- APIGEE_NODE2_EXTERNAL_IP 是在前面步骤中获得的 Apigee 节点 2 的外部 IP 地址。
- APIGEE_NODE3_EXTERNAL_IP 是在前面步骤中获得的 Apigee 节点 3 的外部 IP 地址。
- 将用于配置 HTTPS 的 SSL 证书文件 (
server.crt
) 和密钥文件 (server.key
) 放置在apigee/mgmt-server-proxy
和apigee/router-proxy
文件夹下。如需生成自签名证书,请使用以下命令:
openssl req -newkey rsa:4096 -x509 -nodes -keyout server.key -new -out server.crt -subj "/CN=*.apigeetest.com" -sha256 -days 365
- 在
apigee/uploader/Dockerfile
文件中,更新上传器容器中根用户的SSH-PASSWORD
值:RUN echo 'root:SSH_PASSWORD' | chpasswd
- 获取用户集群的凭据:
gdcloud clusters get-credentials USER_CLUSTER
其中,USER_CLUSTER 是用户 GKE 集群的名称。
- 运行部署脚本以部署 pod 和服务:
source venv/bin/activate
python apigee/solution_deploy_user_cluster.py gdc-air-gapped
- 获取服务的外部 IP 地址:
kubectl get svc -n $PROJECT_ID
- 更新
apigee/helm/scripts/backup_setup.sh
中的SSH_PASSWORD
、root
和UPLOADER_EXTERNAL_IP
:sshpass -p SSH_PASSWORD scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null apigee-backup* root@UPLOADER_EXTERNAL_IP:/temp/
其中:
- SSH_PASSWORD 是根用户的密码。
- UPLOADER_EXTERNAL_IP 是在前面步骤中获得的上传器服务的外部 IP 地址。
- 在
apigee/helm/scripts/apigee_setup.sh
中更新FLUENTBIT_EXTERNAL_IP
:export FLUENTBIT_EXTERNAL_IP=FLUENTBIT_EXTERNAL_IP
- 停止虚拟机:
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
export PROJECT=dev-apigee
for i in 1 2 3 4 5; do gdcloud compute instances stop node$i --project $PROJECT done
- 重新部署 Helm 图表:
python apigee/solution_deploy.py gdc-air-gapped
- 启动虚拟机:
for i in 1 2 3 4 5; do GDCloud compute instances start node$i --project $PROJECT done
- 按如下所示更新
apigee/scripts/apigee_org_setup.sh
中的以下值。根据需要更新其他参数。IP1=APIGEE_NODE1_INTERNAL_IP VHOST_ALIAS="APIGEE_NODE2_EXTERNAL_IP:9001 APIGEE_NODE3_EXTERNAL_IP:9001"
其中:
- APIGEE_NODE1_INTERNAL_IP 是在前面步骤中获得的 Apigee 节点 1 的内部 IP 地址。
- APIGEE_NODE2_EXTERNAL_IP 是在前面步骤中获得的 Apigee 节点 2 的外部 IP 地址。
- APIGEE_NODE3_EXTERNAL_IP 是在前面步骤中获得的 Apigee 节点 3 的外部 IP 地址。
- 在 node1 上运行脚本,以完成组织初始配置:
chmod a+x apigee_org_setup.sh
./apigee_org_setup.sh
- 获取
apigee-elb
服务的外部 IP 地址:gdcloud clusters get-credentials USER_CLUSTER
export PROJECT=dev-apigee
kubectl get svc apigee-elb -n $PROJECT
其中,USER_CLUSTER 是用户 GKE 集群的名称。
此服务充当 Edge 界面、Management API 和 API 代理的端点。
- APIGEE_ELB_EXTERNAL_IP 是在前面步骤中获得的
apigee-elb
服务的外部 IP 地址。 - ORG_NAME 是 Apigee 组织的名称。
- ENV_NAME 是 Apigee 环境的名称。
- 登录 Edge 界面。
- 在 API 代理页面上,点击创建以创建新的 API 代理。
- 在代理详情页面中,输入以下值:
- 代理类型:选择无目标。
- 代理名称:
ok
- 基本路径:
/ok
- 目标:
http://APIGEE_ELB_EXTERNAL_IP:9001
- 点击创建以创建 API 代理。
- 向
/ok
发送 HTTP 请求:curl -i http://APIGEE_ELB_EXTERNAL_IP:9001/ok
- 确认响应为
200 OK
。 - 按照创建密钥库/信任库和别名中的步骤操作,创建具有以下值的自签名证书:
- 密钥库:myTestKeystore
- KeyAlias:myKeyAlias
- 常用名称:apigeetest.com
- 进行 API 调用以创建名为
api.apigeetest.com
的虚拟主机:curl -v -H "Content-Type:application/xml" \ -u "opdk@apigee.com:Apigee123!" "http://APIGEE_ELB_EXTERNAL_IP:8080/v1/o/ORG_NAME/e//virtualhosts" \ -d '<VirtualHost name="secure"> <HostAliases> <HostAlias>api.apigeetest.com</HostAlias> </HostAliases> <Interfaces/> <Port>9005</Port> <OCSPStapling>off</OCSPStapling> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>myTestKeystore</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo> </VirtualHost>'
其中:
- APIGEE_ELB_EXTERNAL_IP 是在前面步骤中获得的
apigee-elb
服务的外部 IP 地址。 - ORG_NAME 是 Apigee 组织的名称。
- ENV_NAME 是应在其中创建虚拟主机的 Apigee 环境的名称。
- APIGEE_ELB_EXTERNAL_IP 是在前面步骤中获得的
- 使用安全虚拟主机创建 API 代理。
- 在路由器上,为虚拟主机配置 DNS 解析:
echo '127.0.0.1 api.apigeetest.com' | sudo tee -a /etc/hosts
- 通过向端点发送 HTTPS 请求来确认虚拟主机在本地正常运行:
curl https://api.apigeetest.com:9005/ok -v -k
- 为端点配置 DNS 解析:
echo 'APIGEE_ELB_EXTERNAL_IP apigeetest.com' | sudo tee -a /etc/hosts
其中,APIGEE_ELB_EXTERNAL_IP 是在前面步骤中获得的
apigee-elb
服务的外部 IP 地址。 - 在网络浏览器中前往
https://apigeetest.com/ok
,并确认其能否正常运行。 - 根据 SSL 证书文件和密钥文件生成密钥库文件:
openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out keystore.pkcs12
keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype jks
- 将密钥库文件放在 node1 上的 Apigee 文件夹下:
scp -i SSH_PRIVATE_KEY_FILE keystore.jks admin@APIGEE_NODE1_EXTERNAL_IP:/home/admin/
其中:
- SSH_PRIVATE_KEY_FILE 是包含 Apigee 节点的 SSH 私钥的文件的名称。
- APIGEE_NODE1_EXTERNAL_IP 是在前面步骤中获得的 Apigee 节点 1 的外部 IP 地址。
- 通过 SSH 连接到 node1,并将密钥库文件移到 Apigee 文件夹:
sudo mv keystore.jks /opt/apigee/customer/application/
- 创建 SSL 配置文件:
sudo vi /tmp/sslConfigFile
- 按如下所示更新
KEY-PASS-PHRASE
的值:HTTPSPORT=9443 DISABLE_HTTP=n KEY_ALGO=JKS KEY_FILE_PATH=/opt/apigee/customer/application/keystore.jks KEY_PASS=KEY_PASS_PHRASE
- 使用配置文件配置 SSL:
sudo chown apigee:apigee /tmp/sslConfigFile
/opt/apigee/apigee-service/bin/apigee-service edge-ui configure-ssl -f /tmp/sslConfigFile
- 为 Edge 界面配置 DNS 解析:
echo 'APIGEE_ELB_EXTERNAL_IP ui.apigeetest.com' | sudo tee -a /etc/hosts
其中,APIGEE_ELB_EXTERNAL_IP 是在前面步骤中获得的
apigee-elb
服务的外部 IP 地址。 - 在网络浏览器中访问
https://ui.apigeetest.com:9443
并确认其是否正常运行。如需了解详情,请参阅相关指南。 - 为密钥库文件配置所有者(使用与 Edge 界面相同的所有者):
sudo chown apigee:apigee /opt/apigee/customer/application/keystore.jks
- 创建属性文件:
sudo vi /opt/apigee/customer/application/management-server.properties
- 重新启动管理服务器以使更改生效:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 确认 HTTPS 在本地有效:
curl -u "opdk@apigee.com:Apigee123!" "https://localhost:8443/v1/users" -k
- 从客户端,在浏览器中访问 https://apigeetest.com:8443/v1/users。 输入管理员用户名和密码,以确认凭据配置正确无误。
如需详细了解如何授予 GDC 气隙角色和权限,请参阅 授予和撤消访问权限。
限制
以下限制适用于 Apigee on GDC air-gapped:
获取所需的文件
如需获取安装文件,您必须先设置已连接的节点,然后下载文件。
设置已连接的节点
连接的节点是 GDC 外部的单个虚拟机,您可以使用该虚拟机下载安装文件。 此虚拟机需要互联网访问权限,并且仅用于安装过程。
连接的节点需要具备以下容量和配置:
如需创建连接的节点,请按照 创建和启动虚拟机实例中的说明操作。创建虚拟机后,请按照连接到 Linux 虚拟机中的说明操作。 连接到虚拟机。如需查看受支持的操作系统列表,请参阅 GDC 支持的操作系统。
下载安装文件
如需下载安装文件,请执行以下操作:
设置存储分区
在此步骤中,GDC 运营商会在 GDC 项目中设置一个存储分区,用于存储 Apigee Edge 私有云备份文件。
创建存储桶
如需在 GDC 项目中创建存储分区,请执行以下操作:
配置存储分区访问权限
如需配置对存储分区的访问权限,请执行以下操作:
设置代码库节点
在此步骤中,GDC 运营商会设置一个代码库节点,以托管 Apigee Edge for Private Cloud 镜像代码库。
创建代码库节点
如需创建代码库节点,请执行以下操作:
配置代码库节点访问权限
如需配置对代码库节点的访问权限,请执行以下操作:
上传安装文件
在此步骤中,GDC 运算符会将以下文件的最新版本上传到代码库节点:
如需上传安装文件,请执行以下操作:
配置镜像代码库
如需配置镜像代码库,请执行以下操作:
部署 Apigee 节点
在此步骤中,GDC 运算符会部署 Apigee API 管理节点。
创建 Apigee 节点
如需创建 Apigee API 管理节点,请执行以下操作:
配置 Apigee 节点访问权限
配置对 Apigee API 管理节点的访问权限:
设置控制节点
在此步骤中,GDC 运营商会设置一个控制节点来管理 Apigee 安装。
创建控制节点
如需创建控制节点,请执行以下操作:
配置控制节点访问权限
如需配置控制节点访问权限,请执行以下操作:
配置 Ansible
如需配置 Ansible 环境,请执行以下操作:
安装 Apigee 组件
在此步骤中,GDC 运算符使用 Ansible 安装 Apigee 组件。
如需安装 Apigee 组件,请执行以下操作:
部署 pod 和服务
在此步骤中,您将部署上传器、反向代理、负载平衡器以及日志记录 pod 和服务。
如需部署 pod 和服务,请执行以下操作:
更新上传器和 Fluent Bit 转发器 IP
在此步骤中,您将更新备份和 Apigee 设置脚本中的上传器和 Fluent Bit 转发器 IP。
更新启动脚本需要重启 Apigee 节点。如需重启节点,请执行以下操作:
为 Apigee 组织启用
在此步骤中,GDC 运营商通过在 node1 上运行设置脚本来启用 Apigee 组织。
如需启用 Apigee 组织,请执行以下操作:
测试 HTTP 连接
在此步骤中,您将测试 Management API 和 API 代理的 HTTP 连接。
如需测试 HTTP 连接,请执行以下操作:
测试 Management API
如需测试 Management API,请向以下端点发送 HTTP 请求:
curl -u "opdk@apigee.com:Apigee123!" "http://APIGEE_ELB_EXTERNAL_IP:8080/v1/o/ORG_NAME/e/ENV_NAME/provisioning/axstatus"
其中:
测试 API 代理
如需测试 API 代理,请执行以下操作:
配置 TLS 并测试 HTTPS
在此步骤中,GDC 运算符会为 API 代理、Edge 界面和管理 API 配置传输层安全协议 (TLS)。
为 API 代理配置 TLS
为 Edge 界面配置 TLS
如需为 Edge 界面配置 TLS,请执行以下操作:
为 Management API 配置 TLS
为 Management API 配置 TLS:
将 KEY_PASS_PHRASE
的值替换为密钥库密码,如下所示:
conf_webserver_ssl.enabled=true # Leave conf_webserver_http.turn.off set to false # because many Edge internal calls use HTTP. conf_webserver_http.turn.off=false conf_webserver_ssl.port=8443 conf_webserver_keystore.path=/opt/apigee/customer/application/keystore.jks # Enter the obfuscated keystore password below. conf_webserver_keystore.password=KEY_PASS_PHRASE