在经过网闸隔离的 Google Distributed Cloud 上安装 Apigee

本指南介绍了如何在与外界隔绝的 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,操作员必须完成以下步骤:

准备工作

在开始安装流程之前,请务必完成以下步骤:

  1. 如果您还没有 GDC 项目,请创建一个用于安装的项目。如需了解详情,请参阅创建项目
  2. 在连接到 GDC 的工作站上或在组织的持续部署环境中,下载、安装配置 gdcloud CLI。
  3. 获取使用 gdcloud CLI 和 kubectl API 所需的凭据。如需了解所需步骤,请参阅对账号进行身份验证以获取访问权限
  4. 确认您从 Apigee 客户经理处收到的 Apigee 用户名和密码。
  5. 确认 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:管理项目命名空间中的所有资源。
  • 如需详细了解如何授予 GDC 气隙角色和权限,请参阅 授予和撤消访问权限

    限制

    以下限制适用于 Apigee on GDC 网闸隔离配置:

    • Apigee on GDC 网闸隔离配置 不附带 DNS 服务器,而是使用本地 DNS 解析作为解决方法。如果 Apigee on GDC 网闸隔离配置 部署在具有外部 DNS 服务器的环境中,请将配置本地 DNS 的步骤替换为在 DNS 服务器中配置 DNS 条目的步骤。
    • Apigee on GDC 网闸隔离配置 不包含独立的 SMTP 服务器。您可以随时配置 SMTP 服务器,以启用从管理服务器和管理界面发出的账号创建和密码重置出站电子邮件通知。管理 API 仍可用于 Apigee 用户账号管理。如需了解详情,请参阅配置 Edge SMTP 服务器
    • 在 GDC 网闸隔离配置上实现的 Apigee 不会实现入侵检测和防御。安装并配置入侵防御系统 (IPS),例如 Snort,以检测和防范恶意活动。

    获取所需的文件

    如需获取安装文件,您必须先设置已连接的节点,然后下载文件。

    设置已连接的节点

    连接的节点是 GDC 外部的单个虚拟机,您可以使用该虚拟机下载安装文件。 此虚拟机需要互联网访问权限,并且仅用于安装过程。

    连接的节点需要以下容量和配置:

    • 操作系统:Rocky Linux 8
    • 机器大小:8 GB RAM;2 个 vCPU 核心;64 GB 本地磁盘存储空间
    • 连接
      • 入站:TCP 22 (SSH)
      • 出站流量:互联网

    如需创建连接的节点,请按照 创建和启动虚拟机实例中的说明操作。创建虚拟机后,请按照连接到 Linux 虚拟机中的说明操作。 连接到虚拟机。如需查看受支持的操作系统列表,请参阅 GDC 支持的操作系统

    下载安装文件

    如需下载安装文件,请执行以下操作:

    1. 请参阅 Apigee Edge 适用于私有云的版本说明,了解 GDC 支持的最新正式发布版本(如“适用于私有云的 Edge”列中所述)。
    2. 下载 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
    3. 将最新的 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 是您打算安装的最新 Apigee Edge for Private Cloud GDC 发布版本,例如 4.53.01

    4. 安装 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 发布版本。

    5. 在连接的节点上运行设置脚本:
      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
    6. 通过 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 地址。

    设置存储分区

    在此步骤中,GDC 运营商会在 GDC 项目中设置一个存储分区,用于存储 Apigee Edge 私有云备份文件。

    创建存储桶

    如需在 GDC 项目中创建存储分区,请执行以下操作:

    1. 向组织管理员集群进行身份验证:
      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 集群的名称。

    2. 设置项目和存储分区环境变量:
      export PROJECT=PROJECT
      export BUCKET=BUCKET_NAME

      其中:

      • PROJECT 是您的 GDC 项目的名称。
      • BUCKET_NAME 是您要创建的用于存储 Apigee Edge for Private Cloud 备份文件的存储分区的名称。
    3. 应用存储分区配置:
      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 天的存储分区。

    配置存储分区访问权限

    如需配置对存储分区的访问权限,请执行以下操作:

    1. 在项目中创建服务账号:
      gdcloud iam service-accounts create $BUCKET-sa \
          --project=$PROJECT
    2. 创建角色和角色绑定,以生成用于访问存储分区的 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
    3. 从密钥中获取访问密钥 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==
    4. 创建供上传者在用户 GKE 集群中使用的 Secret:
      1. 向用户 GKE 集群进行身份验证:
        gdcloud clusters get-credentials USER_CLUSTER

        其中,USER_CLUSTER 是用户 GKE 集群的名称。

      2. 应用 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 是在上一步中获得的访问密钥。
    5. 获取存储分区的存储端点、完全限定域名 (FQDN) 和区域:
      1. 向组织管理员集群进行身份验证:
        gdcloud clusters get-credentials ORG_ADMIN_CLUSTER

        其中,ORG_ADMIN_CLUSTER 是组织管理员 GKE 集群的名称。

      2. 获取存储分区的存储端点、完全限定域名 (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
    6. 更新 apigee/helm_user_cluster/values-cookie-air-gapped.yaml 文件中的以下值:
      objectstorekeyname: "apigee-backup-bucket-secret"
      objectstoreurl: "BUCKET_ENDPOINT"
      objectstorebucket: "BUCKET_FQDN"

      其中:

      • BUCKET_ENDPOINT 是在上一步中获得的存储分区的端点。
      • BUCKET_FQDN 是在上一步中获取的存储分区的完全限定域名。

    设置代码库节点

    在此步骤中,GDC 运算符会设置一个代码库节点,以托管 Apigee Edge for Private Cloud 镜像代码库。

    创建代码库节点

    如需创建代码库节点,请执行以下操作:

    1. 按如下方式更新 apigee/helm_user_cluster/values-cookie-air-gapped.yaml
      repo_node:
        enabled: true
      
      apigee_node:
        enabled: false
      
      control_node:
        enabled: false

      确保 repo_node 已启用,且 apigee_nodecontrol_node 均已停用。这些节点将在后续步骤中部署。

    2. 获取组织管理员集群的凭据:
      gdcloud clusters get-credentials ORG_ADMIN_CLUSTER

      其中,ORG_ADMIN_CLUSTER 是组织管理员 GKE 集群的名称。

    3. 创建 Python 虚拟环境:
      python3 -m venv venv /
      source venv/bin/activate
    4. 运行部署脚本以创建代码库节点:
      python apigee/solution_deploy.py gdc-air-gapped

    配置代码库节点访问权限

    如需配置对代码库节点的访问权限,请执行以下操作:

    1. 为代码库节点配置 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 公钥的文件的名称。

    2. 获取代码库节点的外部 IP 地址:
      kubectl get virtualmachineexternalaccess -n $PROJECT $NODE -ojsonpath='{.status.ingressIP}'
    3. 获取资源库节点的内部 IP 地址:
      kubectl get virtualmachines.virtualmachine.gdc.goog -n $PROJECT $NODE -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'

    上传安装文件

    在此步骤中,GDC 操作员会将以下文件的最新版本上传到代码库节点:

    • apigee-4.53.01
    • apigee-nginx.tar
    • postgresql14.tar
    • fluentbit.tar
    • ansible-rpms.tar
    • apigee-repos.tar

    如需上传安装文件,请执行以下操作:

    1. 将 SSH 私钥文件复制到代码库节点:
      scp -i SSH_PRIVATE_KEY_FILE ~/apigee-files/* admin@REPO_EXTERNAL_IP:/tmp

      其中:

      • SSH_PRIVATE_KEY_FILE 是包含您的 SSH 私钥的文件的名称。
      • REPO_EXTERNAL_IP 是在上一步中获得的代码库节点的外部 IP 地址。
    2. 将包含 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 地址。

    配置镜像代码库

    如需配置镜像代码库,请执行以下操作:

    1. apigee/scripts/repo_setup.sh 复制到代码库节点。
    2. 在脚本中,将 REPO_USERREPO_PASSWORD 替换为镜像代码库所需的用户名和密码。
    3. 运行脚本:
      chmod a+x repo_setup.sh
      ./repo_setup.sh

      如果您遇到 No such file or directory 错误,请重新运行脚本。

    4. 从代码库节点在本地测试与镜像代码库的连接。
      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 节点

    在此步骤中,GDC 运算符会部署 Apigee API 管理节点。

    创建 Apigee 节点

    如需创建 Apigee API 管理节点,请执行以下操作:

    1. apigee/helm/scripts/apigee_setup.sh 中的 REPO_INTERNAL_IPREPO_USER_NAMEREPO_PASSWORD 替换为所需的值。
    2. 将这些值导出为环境变量:
      export REPO_IP=REPO_INTERNAL_IP
      export REPO_USER=REPO_USER_NAME
      export REPO_PASSWORD=REPO_PASSWORD
    3. apigee/helm/values-cookie-air-gapped.yaml 中启用 apigee_node,如下所示:
      apigee_node:
        enabled: true
      
    4. 运行部署脚本以创建 Apigee 节点:
        source venv/bin/activate
        python apigee/solution_deploy.py gdc-air-gapped

    配置 Apigee 节点访问权限

    配置对 Apigee API 管理节点的访问权限:

    1. 向组织管理员集群进行身份验证:
      gdcloud clusters get-credentials ORG_ADMIN_CLUSTER

      其中,ORG_ADMIN_CLUSTER 是组织管理员 GKE 集群的名称。

    2. 为每个节点创建 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 公钥的文件的名称。

    3. 获取 Apigee 节点的外部 IP 地址:
      for i in 1 2 3 4 5; do
        kubectl get virtualmachineexternalaccess -n $PROJECT node$i -ojsonpath='{.status.ingressIP}'
        echo
        done
    4. 获取 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
    5. (可选)检查启动脚本是否在 Apigee 节点上成功运行:
      1. 通过 SSH 连接到节点,然后运行以下命令:
        sudo journalctl -u cloud-final -f
      2. 查找类似如下的日志:
        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

    设置控制节点

    在此步骤中,GDC 运营商会设置一个控制节点来管理 Apigee 安装。

    创建控制节点

    如需创建控制节点,请执行以下操作:

    1. apigee/helm/scripts/control_setup.sh 中的 REPO_INTERNAL_IPREPO_USER_NAMEREPO_PASSWORD 替换为所需的值。
    2. apigee/helm/values-cookie-air-gapped.yaml 中启用 control_node,如下所示:
      control_node:
        enabled: true
      
    3. 运行部署脚本以创建控制节点:
      source venv/bin/activate
      python apigee/solution_deploy.py gdc-air-gapped

    配置控制节点访问权限

    如需配置控制节点访问权限,请执行以下操作:

    1. 配置对控制节点的 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
    2. 获取控制节点的外部 IP 地址:
      kubectl get virtualmachineexternalaccess -n $PROJECT control -ojsonpath='{.status.ingressIP}'
    3. 获取控制节点的内部 IP:
      kubectl get virtualmachines.virtualmachine.GDC.goog -n $PROJECT control -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'

    配置 Ansible

    在此步骤中,GDC 运算符会在控制节点上设置 环境。

    如需配置 Ansible 环境,请执行以下操作:

    1. 通过 SSH 连接到控制节点并设置 Ansible 环境:
      cd /home/admin
      cp -r /tmp/apigee-repos .
      cd apigee-repos/ansible-opdk-accelerator/setup
    2. 将远程 Git 代码库替换为本地文件:
      sed -i 's/https:\/\/github.com\/carlosfrias/git+file:\/\/\/home\/admin\/apigee-repos/g'  requirements.yml
      sed -i 's/\.git$//g'  requirements.yml
      
    3. Install Ansible requirements:
        sudo chown -R admin /home/admin/apigee-repos
        ansible-galaxy install -r requirements.yml -f
    4. 更新设置配置:
      1. 修改 main.yml 文件:
        vi ~/apigee-repos/ansible-opdk-accelerator/setup/roles/apigee-opdk-setup-ansible-controller/tasks/main.yml
      2. 移除需要 GitHub 访问权限的任务:
        • 通过 Git SSH 签出配置代码库
        • 通过 Git HTTPS 签出配置代码库
      3. 运行设置 playbook:
        cd ~/apigee-repos/ansible-opdk-accelerator/setup
        ansible-playbook setup.yml
    5. 将 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 地址。
    6. 创建 Ansible 清单配置文件:
      1. apigee/scripts/ansible/prod.cfg 文件的内容复制到 prod.cfg 文件中:
        vi ~/.ansible/multi-planet-configurations/prod.cfg
      2. 创建 edge-dc1 文件夹,并将 apigee/scripts/ansible/edge-dc1 文件的内容复制到 edge-dc1 文件中:
        mkdir ~/.ansible/inventory/prod
        vi ~/.ansible/inventory/prod/edge-dc1
    7. 更新 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 地址。

    8. 使用以下值配置 ~/.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 管理服务器的密码。

    9. 添加包含有效 Apigee Edge 适用于私有云的许可文件的许可文件。该文件的名称必须为 license.txt
    10. ~/.apigee-secure/license.txt 文件的内容复制到您刚刚创建的 license.txt 中。
    11. ~/.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 代码库的网址。

    12. 将配置文件导出为环境变量:
      export ANSIBLE_CONFIG=~/.ansible/multi-planet-configurations/prod.cfg

    安装 Apigee 组件

    在此步骤中,GDC 运算符使用 Ansible 安装 Apigee 组件。

    如需安装 Apigee 组件,请执行以下操作:

    1. 将远程 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
    2. 安装 Ansible 要求:
      ansible-galaxy install -r requirements.yml -f
    3. 修补 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
    4. install.yml 文件的内容替换为 apigee/scripts/ansible/install.yml 中的内容。
    5. 运行 playbook 以安装 Apigee 组件:
      ansible-playbook install.yml
    6. Edge 界面中停用用户的重设密码链接。GDC 网闸隔离配置上的 Apigee 不包含 SMTP 服务器。按照 Edge 界面 中的步骤停用密码重置链接

    部署 pod 和服务

    在此步骤中,您将部署上传器、反向代理、负载平衡器以及日志记录 pod 和服务。

    如需部署 pod 和服务,请执行以下操作:

    1. 按照 创建 Harbor 注册表实例中的说明在 GDC 项目 dev-apigee 中创建 Harbor 实例。
    2. 按照 创建 Harbor 项目中的说明创建一个名为 apigee 的 Harbor 项目。
    3. 按照配置访问权限控制中的说明为 Harbor 项目设置访问权限控制。
    4. 按照登录 Docker 和 Helm 中的说明配置 Docker 身份验证。
    5. 更新 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 地址。

    6. 将用于配置 HTTPS 的 SSL 证书文件 (server.crt) 和密钥文件 (server.key) 放置在 apigee/mgmt-server-proxyapigee/router-proxy 文件夹下。

      如需生成自签名证书,请使用以下命令:

      openssl req -newkey rsa:4096 -x509 -nodes -keyout server.key -new -out server.crt -subj "/CN=*.apigeetest.com" -sha256 -days 365
    7. apigee/uploader/Dockerfile 文件中,更新上传器容器中根用户的 SSH-PASSWORD 值:
      RUN echo 'root:SSH_PASSWORD' | chpasswd
    8. 获取用户集群的凭据:
      gdcloud clusters get-credentials USER_CLUSTER

      其中,USER_CLUSTER 是用户 GKE 集群的名称。

    9. 运行部署脚本以部署 pod 和服务:
      source venv/bin/activate
      python apigee/solution_deploy_user_cluster.py gdc-air-gapped
    10. 获取服务的外部 IP 地址:
      kubectl get svc -n $PROJECT_ID

    更新了上传器和 Fluent Bit 转发器的 IP

    在此步骤中,您将更新备份和 Apigee 设置脚本中的上传器和 Fluent Bit 转发器 IP。

    1. apigee/helm/scripts/backup_setup.sh 中更新 SSH_PASSWORDrootUPLOADER_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 地址。

    2. apigee/helm/scripts/apigee_setup.sh 中更新 FLUENTBIT_EXTERNAL_IP
      export FLUENTBIT_EXTERNAL_IP=FLUENTBIT_EXTERNAL_IP

    更新启动脚本需要重启 Apigee 节点。如需重启节点,请执行以下操作:

    1. 停止虚拟机:
      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
    2. 重新部署 Helm 图表:
      python apigee/solution_deploy.py gdc-air-gapped
    3. 启动虚拟机:
      for i in 1 2 3 4 5; do
        GDCloud compute instances start node$i --project $PROJECT
        done

    为 Apigee 组织启用

    在此步骤中,GDC 运营商通过在 node1 上运行设置脚本来载入 Apigee 组织。

    如需完成 Apigee 组织的初始配置,请执行以下操作:

    1. 按如下所示更新 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 地址。

    2. node1 上运行脚本,以完成组织初始配置:
      chmod a+x apigee_org_setup.sh
      ./apigee_org_setup.sh

    测试 HTTP 连接

    在此步骤中,您将测试 Management API 和 API 代理的 HTTP 连接。

    如需测试 HTTP 连接,请执行以下操作:

    1. 获取 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 代理的端点。

    测试 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"

    其中:

    • APIGEE_ELB_EXTERNAL_IP 是在前面步骤中获得的 apigee-elb 服务的外部 IP 地址。
    • ORG_NAME 是 Apigee 组织的名称。
    • ENV_NAME 是 Apigee 环境的名称。

    测试 API 代理

    如需测试 API 代理,请执行以下操作:

    1. 登录 Edge 界面
    2. API 代理页面上,点击创建以创建新的 API 代理。
    3. 代理详情页面中,输入以下值:
      • 代理类型:选择无目标
      • 代理名称ok
      • 基本路径/ok
      • 目标:http://APIGEE_ELB_EXTERNAL_IP:9001
    4. 点击创建以创建 API 代理。
    5. /ok 发送 HTTP 请求:
      curl -i http://APIGEE_ELB_EXTERNAL_IP:9001/ok
    6. 确认响应为 200 OK

    配置 TLS 并测试 HTTPS

    在此步骤中,GDC Operator 会为 API 代理、Edge 界面和 Management API 配置传输层安全协议 (TLS)。

    为 API 代理配置 TLS

    1. 按照创建密钥库/信任库和别名中的步骤操作,创建具有以下值的自签名证书:
      • 密钥库:myTestKeystore
      • KeyAlias:myKeyAlias
      • 常用名称:apigeetest.com
    2. 进行 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 环境的名称。
    3. 使用安全虚拟主机创建 API 代理。
    4. 在路由器上,为虚拟主机配置 DNS 解析:
      echo '127.0.0.1 api.apigeetest.com' | sudo tee -a /etc/hosts
    5. 通过向端点发送 HTTPS 请求,确认虚拟主机在本地正常运行:
      curl https://api.apigeetest.com:9005/ok -v -k
    6. 为端点配置 DNS 解析:
      echo 'APIGEE_ELB_EXTERNAL_IP apigeetest.com' | sudo tee -a /etc/hosts

      其中,APIGEE_ELB_EXTERNAL_IP 是在前面步骤中获得的 apigee-elb 服务的外部 IP 地址。

    7. 在网络浏览器中前往 https://apigeetest.com/ok,并确认其能否正常运行。

    为 Edge 界面配置 TLS

    如需为 Edge 界面配置 TLS,请执行以下操作:

    1. 根据 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
    2. 将密钥库文件放在 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 地址。

    3. 通过 SSH 连接到 node1,并将密钥库文件移到 Apigee 文件夹:
      sudo mv keystore.jks /opt/apigee/customer/application/
    4. 创建 SSL 配置文件:
      sudo vi /tmp/sslConfigFile
    5. 按如下所示更新 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
    6. 使用配置文件配置 SSL:
      sudo chown apigee:apigee /tmp/sslConfigFile
      /opt/apigee/apigee-service/bin/apigee-service edge-ui configure-ssl -f /tmp/sslConfigFile
    7. 为 Edge 界面配置 DNS 解析:
      echo 'APIGEE_ELB_EXTERNAL_IP ui.apigeetest.com' | sudo tee -a /etc/hosts

      其中,APIGEE_ELB_EXTERNAL_IP 是在前面步骤中获得的 apigee-elb 服务的外部 IP 地址。

    8. 在网络浏览器中访问 https://ui.apigeetest.com:9443,并确认其可正常访问。如需了解详情,请参阅相关指南。

    为 Management API 配置 TLS

    如需为 Management API 配置 TLS,请执行以下操作:

    1. 为密钥库文件配置所有者(使用与 Edge 界面相同的用户):
      sudo chown apigee:apigee /opt/apigee/customer/application/keystore.jks
    2. 创建属性文件:
      sudo vi /opt/apigee/customer/application/management-server.properties
    3. 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
    4. 重启管理服务器以使更改生效:
      /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    5. 确认 HTTPS 在本地有效:
      curl -u "opdk@apigee.com:Apigee123!" "https://localhost:8443/v1/users" -k
    6. 在客户端中,通过浏览器访问 https://apigeetest.com:8443/v1/users。 输入管理员用户名和密码,以确认凭据配置正确无误。

    后续步骤