配置 Apigee mTLS

在集群中的每个节点上安装 apigee-mtls 组件后,您必须对其进行配置和初始化。为此,您需要生成证书/密钥对,并更新管理机器上的配置文件。然后,您将生成的相同文件部署到集群中的所有节点,并初始化本地 apigee-mtls 组件。

配置 apigee-mtls(初始安装后)

本部分介绍了如何在初始安装后立即为单个数据中心配置 Apigee mTLS。如需了解如何更新现有 Apigee mTLS 安装,请参阅更改现有 apigee-mtls 配置。如需了解如何配置多个数据中心,请参阅为 Apigee mTLS 配置多个数据中心。

以下是配置 apigee-mtls 的一般流程:

  1. 更新配置文件:在管理员机器上,更新配置文件以包含 apigee-mtls 设置。
  2. 安装 Consul 并生成凭据:安装 Consul 并使用它生成 TLS 凭据(仅一次)。

    此外,请修改 Apigee mTLS 配置文件,以执行以下操作:

    1. 添加凭证信息
    2. 定义集群的拓扑

    请注意,您可以使用现有凭据,也可以使用 Consul 生成凭据。

  3. 分发配置文件和凭据:将生成的相同证书/密钥对和更新后的配置文件分发到集群中的所有节点。
  4. 初始化 apigee-mtls:在每个节点上初始化 apigee-mtls 组件。

后续几个部分将介绍其中每个步骤。

第 1 步:更新配置文件

本部分介绍如何修改配置文件以包含 mTLS 配置属性。如需详细了解配置文件,请参阅创建配置文件。

使用 mTLS 相关属性更新配置文件后,您需要先将其复制到集群中的所有节点,然后再在这些节点上初始化 apigee-mtls 组件。

引用配置文件的命令使用“config_file”来表示其位置是可变的,具体取决于您将其存储在每个节点上的位置。

如需更新配置文件,请执行以下操作:

  1. 在管理机器上,打开配置文件。
  2. 复制以下一组 mTLS 配置属性,并将其粘贴到配置文件中:
    ALL_IP="ALL_PRIVATE_IPS_IN_CLUSTER"
    ZK_MTLS_HOSTS="ZOOKEEPER_PRIVATE_IPS"
    CASS_MTLS_HOSTS="CASSANDRA_PRIVATE_IPS"
    PG_MTLS_HOSTS="POSTGRES_PRIVATE_IPS"
    RT_MTLS_HOSTS="ROUTER_PRIVATE_IPS"
    MS_MTLS_HOSTS="MGMT_SERVER_PRIVATE_IPS"
    MP_MTLS_HOSTS="MESSAGE_PROCESSOR_PRIVATE_IPS"
    QP_MTLS_HOSTS="QPID_PRIVATE_IPS"
    LDAP_MTLS_HOSTS="OPENLDAP_PRIVATE_IPS"
    MTLS_ENCAPSULATE_LDAP="y"
    
    ENABLE_SIDECAR_PROXY="y"
    ENCRYPT_DATA="BASE64_GOSSIP_MESSAGE"
    PATH_TO_CA_CERT="PATH/TO/consul-agent-ca.pem"
    PATH_TO_CA_KEY="PATH/TO/consul-agent-ca-key.pem"
    APIGEE_MTLS_NUM_DAYS_CERT_VALID_FOR="NUMBER_OF_DAYS"

    根据您的配置设置每个属性的值。

    下表介绍了这些配置属性:

    属性 说明
    ALL_IP 集群中所有节点的专用主机 IP 地址的空格分隔列表。

    IP 地址的顺序无关紧要,但整个集群中所有配置文件中的顺序必须相同。

    如果您为多个数据中心配置 Apigee mTLS,请列出所有区域中所有主机的所有 IP 地址。

    LDAP_MTLS_HOSTS 集群中 OpenLDAP 节点的专用主机 IP 地址。
    ZK_MTLS_HOSTS

    以空格分隔的专用主机 IP 地址列表,这些地址是集群中托管 ZooKeeper 节点的主机。

    请注意,根据要求,必须至少有三个 ZooKeeper 节点。

    CASS_MTLS_HOSTS 集群中托管 Cassandra 服务器的专用主机 IP 地址的空格分隔列表。
    PG_MTLS_HOSTS 集群中托管 Postgres 服务器的专用主机 IP 地址列表(以空格分隔)。
    RT_MTLS_HOSTS 以空格分隔的专用主机 IP 地址列表,这些地址是集群中托管路由器的地址。
    MTLS_ENCAPSULATE_LDAP 加密消息处理器和 LDAP 服务器之间的 LDAP 流量。设置为 y。
    MS_MTLS_HOSTS 集群中托管管理服务器节点的专用主机 IP 地址的列表(以空格分隔)。
    MP_MTLS_HOSTS 集群中托管消息处理器的专用主机 IP 地址的空格分隔列表。
    QP_MTLS_HOSTS 以空格分隔的专用主机 IP 地址列表,这些地址是集群中托管 Qpid 服务器的主机。
    ENABLE_SIDECAR_PROXY 确定 Cassandra 和 Postgres 是否应感知服务网格。

    您必须将此值设置为“y”。

    ENCRYPT_DATA Consul 使用的 base64 编码加密密钥。您在第 2 步:安装 Consul 并生成凭据中使用 consul keygen 命令生成了此密钥。

    此值在集群中的所有节点上必须相同。

    PATH_TO_CA_CERT 节点上证书文件的位置。您在第 2 步:安装 Consul 并生成凭据中生成了此文件。

    此位置在集群中的所有节点上都应相同,以便配置文件相同。

    证书必须采用 X509v3 编码。

    PATH_TO_CA_KEY 节点上密钥文件的位置。您在第 2 步:安装 Consul 并生成凭据中生成了此文件。

    此位置在集群中的所有节点上都应相同,以便配置文件相同。

    密钥文件必须采用 X509v3 编码。

    APIGEE_MTLS_NUM_DAYS_CERT_VALID_FOR

    生成自定义证书时,证书的有效天数。

    默认值为 365。最大值为 7865 天(5 年)。

    除了上面列出的属性之外,在多数据中心配置中安装 Apigee mTLS 时,它还会使用其他几个属性。如需了解详情,请参阅配置多个数据中心。

  3. 请务必将 ENABLE_SIDECAR_PROXY 属性设置为“y”。
  4. 更新与主机相关的属性中的 IP 地址。引用每个节点时,请务必使用专用 IP 地址,而不是公共 IP 地址。

    在后续步骤中,您将设置其他属性(例如 ENCRYPT_DATA、PATH_TO_CA_CERT 和 PATH_TO_CA_KEY)的值。您尚未设置其值。

    修改 apigee-mtls 配置属性时,请注意以下事项:

    • 所有属性都是字符串;您必须用单引号或双引号将所有属性的值括起来。
    • 如果与主机相关的值有多个专用 IP 地址,请用空格分隔每个 IP 地址。
    • 对于配置文件中所有与主机相关的属性,请使用专用 IP 地址,而不是主机名或公共 IP 地址。
    • 在整个集群的所有配置文件中,属性值中的 IP 地址顺序必须相同。
  5. 将所做的更改保存到配置文件。

第 2 步:安装 Consul 并生成凭证

本部分介绍了如何安装 Consul 并生成凭据。

您必须选择以下方法之一来生成凭证:

  • 使用 Consul 创建您自己的 CA,如本部分所述(推荐)
  • 将现有 CA 的凭据与 Apigee mTLS 搭配使用(高级)

关于凭证

凭证包含以下内容:

  • 证书:每个节点上托管的 TLS 证书
  • 密钥:每个节点上托管的 TLS 公钥
  • Gossip 消息:采用 base-64 编码的加密密钥

您只需为每个文件生成一个版本。您需要将密钥和证书文件复制到集群中的所有节点,并将加密密钥添加到配置文件中,然后将配置文件也复制到所有节点。

如需详细了解 Consul 的加密实现,请参阅以下内容:

安装 Consul 并生成凭证

您可以使用本地 Consul 二进制文件生成 Apigee mTLS 用于对私有云集群中节点之间的安全通信进行身份验证的凭据。因此,您必须先在管理机器上安装 Consul,然后才能生成凭据。

如需安装 Consul 并生成 mTLS 凭据,请执行以下操作:

  1. 在管理机器上,从 HashiCorp 网站下载 Consul 1.6.2 二进制文件。
  2. 解压缩下载的归档文件的内容。例如,将内容提取到 /opt/consul/。
  3. 在管理机器上,通过执行以下命令创建新的证书授权机构 (CA):
    /opt/consul/consul tls ca create

    Consul 会创建以下文件,即证书/密钥对:

    • consul-agent-ca.pem(证书)
    • consul-agent-ca-key.pem(密钥)

    默认情况下,证书和密钥文件采用 X509v3 编码。

    稍后,您需要将这些文件复制到集群中的所有节点。不过,目前您只需决定将这些文件放在节点上的哪个位置。它们应位于每个节点上的同一位置。例如 /opt/apigee/。

  4. 在配置文件中,将 PATH_TO_CA_CERT 的值设置为您要将 consul-agent-ca.pem 文件复制到节点上的位置。例如:
    PATH_TO_CA_CERT="/opt/apigee/consul-agent-ca.pem"
  5. 将 PATH_TO_CA_KEY 的值设置为您要将 consul-agent-ca-key.pem 文件复制到节点上的位置。例如:
    PATH_TO_CA_KEY="/opt/apigee/consul-agent-ca-key.pem"
  6. 执行以下命令,为 Consul 创建加密密钥:
    /opt/consul/consul keygen

    Consul 会输出一个随机字符串,如下所示:

    QbhgD+EXAMPLE+Y9u0742X/IqX3X429/x1cIQ+JsQvY=
  7. 复制该字符串,并将其设置为配置文件中 ENCRYPT_DATA 属性的值。例如:
    ENCRYPT_DATA="QbhgD+EXAMPLE+Y9u0742X/IqX3X429/x1cIQ+JsQvY="
  8. 保存配置文件。

以下示例展示了配置文件中与 mTLS 相关的设置(包含示例值):

...
IP1=10.126.0.121
IP2=10.126.0.124
IP3=10.126.0.125
IP4=10.126.0.127
IP5=10.126.0.130
ALL_IP="$IP1 $IP2 $IP3 $IP4 $IP5"
LDAP_MTLS_HOSTS="$IP3"
ZK_MTLS_HOSTS="$IP3 $IP4 $IP5"
CASS_MTLS_HOSTS="$IP3 $IP4 $IP5"
PG_MTLS_HOSTS="$IP2 $IP1"
RT_MTLS_HOSTS="$IP4 $IP5"
MS_MTLS_HOSTS="$IP3"
MP_MTLS_HOSTS="$IP4 $IP5"
QP_MTLS_HOSTS="$IP2 $IP1"
ENABLE_SIDECAR_PROXY="y"
ENCRYPT_DATA="QbhgD+EXAMPLE+Y9u0742X/IqX3X429/x1cIQ+JsQvY="
PATH_TO_CA_CERT="/opt/apigee/consul-agent-ca.pem"
PATH_TO_CA_KEY="/opt/apigee/consul-agent-ca-key.pem"
...

第 3 步:分发配置文件和凭证

使用 scp 等工具将以下文件复制到运行 ZooKeeper 的节点:

  • 配置文件:复制此文件的更新版本,并替换所有节点(而不仅仅是运行 ZooKeeper 的节点)上的现有版本。
  • consul-agent-ca.pem::复制到您在配置文件中指定为 PATH_TO_CA_CERT 值的位置。
  • consul-agent-ca-key.pem::复制到您在配置文件中指定为 PATH_TO_CA_KEY 值的路径。

请确保您将证书和密钥文件复制到的位置与您在第 2 步:安装 Consul 并生成凭证中在配置文件中设置的值一致。

第 4 步:初始化 apigee-mtls

更新配置文件、将其和凭据复制到集群中的所有节点,并在每个节点上安装 apigee-mtls 后,您就可以在每个节点上初始化 apigee-mtls 组件了。

如需初始化 apigee-mtls,请执行以下操作:

  1. 以根用户身份登录集群中的节点。您可以按任意顺序在节点上执行这些步骤。
  2. 将 apigee:apigee 用户设为更新后的配置文件的所有者,如以下示例所示:
    chown apigee:apigee config_file
  3. 通过执行以下命令来配置 apigee-mtls 组件:
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls setup -f config_file
  4. (可选)执行以下命令,验证设置是否成功:
    /opt/apigee/apigee-mtls/lib/actions/iptables.sh validate
  5. 执行以下命令,启动 Apigee mTLS:
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls start

    安装 Apigee mTLS 后,您必须在节点上的任何其他组件之前启动此组件。

  6. (仅限 Cassandra 节点)Cassandra 需要额外的参数才能在安全网格中运行。因此,您必须在每个 Cassandra 节点上执行以下命令:
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra setup -f config_file
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
  7. (仅限 Postgres 节点)Postgres 需要额外的参数才能在安全网格中运行。因此,您必须在 Postgres 节点上执行以下操作:

    (仅限主账号)

    1. 在 Postgres 主节点上执行以下命令:
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql setup -f config_file
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql configure
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart

    (仅限待机模式)

    1. 备份现有 Postgres 数据。如需安装 Apigee mTLS,您必须重新初始化主节点/备用节点,因此会丢失数据。如需了解详情,请参阅为 Postgres 设置主/备用复制。
    2. 删除所有 Postgres 数据:
      rm -rf /opt/apigee/data/apigee-postgresql/pgdata
    3. 配置 Postgres,然后重启 Postgres,如以下示例所示:
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql setup -f config_file
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql configure
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart

    如果您要在多数据中心拓扑上进行安装,请使用配置文件的绝对路径。

  8. 按照启动顺序在节点上启动其余 Apigee 组件,如以下示例所示:
    /opt/apigee/apigee-service/bin/apigee-service component_name start
  9. 对集群中的每个节点重复此过程。
  10. (可选)使用以下一种或多种方法验证 apigee-mtls 初始化是否成功:
    1. 验证 iptables 配置
    2. 验证远程代理状态
    3. 验证仲裁状态

    验证配置中介绍了其中每种方法。

更改现有 apigee-mtls 配置

如需自定义现有 apigee-mtls 配置,您必须卸载并重新安装 apigee-mtls。

再次强调,在更改现有 Apigee mTLS 配置时:

  • 如果您更改了配置文件,则必须先卸载 apigee-mtls,然后重新运行 setup 或 configure:
    # DO THIS:
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls uninstall
    
    # BEFORE YOU DO THIS:
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls setup -f file
    OR
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls configure
  • 您必须在集群中的所有节点(而不仅仅是单个节点)上卸载并重新运行 setup 或 configure。