启用非 SNI 和 HTTP 客户端

本主题介绍了如何启用非 SNI 客户端、HTTP 客户端,以及同时综合使用这两者用于 Apigee Hybrid。

如何配置非 SNI 客户端

本部分介绍如何在 Apigee Hybrid 中支持非 SNI(服务器名称指示)客户端。非 SNI 客户端使用端口 443,如果要将混合运行时实例与 Google 集成,则需要使用该端口 Cloud Load Balancing 或不支持 SNI 的客户端。
  1. 创建 ApigeeRoute 自定义资源定义 (CRD)。确保将 enableNonSniClient 设置为 true
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 443
        protocol: HTTPS
        tls:
          credentialName: credential_name
          mode: SIMPLE
          #optional
          minProtocolVersion: TLS_AUTO
      selector:
        app: istio-ingressgateway
      enableNonSniClient: true
    

    其中:

    • route_name 是您为 CRD 指定的名称。
    • credential_name 是 Kubernetes Secret 的名称,它部署到包含您的虚拟主机的 TLS 凭据的集群。您可以使用以下 kubectl 命令查找凭据名称:
      kubectl -n apigee get ApigeeRoutes -o=yaml | grep credentialName
    • hostnames 必须设置为通配符“*”。
  2. 打开替换文件,然后执行下一步中所述的更改。
  3. 对于每个环境组,将 ApigeeRoute 名称添加到 additionalGateways 属性。例如:
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. 保存 CRD 文件。例如:ApigeeRoute.yaml
  5. 将 CRD 应用到集群:
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. 将更改应用到 virtualhosts
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT

使用说明

  • 如果集群有多个组织,会发生什么情况?

    对于给定端口 (443),Ingress 位于集群级层,并且 ApigeeRoute CRD 只能有一个密钥/证书对,因此所有组织必须共用相同的密钥/证书对。

  • 如果集群有多个环境组,会发生什么情况。虚拟主机共用同一个密钥/证书对是否可行?

    所有环境组中的所有主机名都必须使用相同的密钥/证书对。

  • 我们为何要创建 ApigeeRoute 而不是网关?

    ApigeeRoutes 可以由 Apigee 验证;但网关 (Istio CRD) 不能。从技术上讲,即使可以使用网关,但我们可以(通过验证网络钩子)避免潜在的配置错误。

启用 HTTP 客户端

本部分介绍如何通过 Apigee Hybrid 使用 HTTP 客户端。

  1. 创建 ApigeeRoute 自定义资源定义 (CRD)。例如:
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 80
        protocol: HTTP
      selector:
        app: istio-ingressgateway
      enableNonSniClient: true

    其中:

    • route_name 是您为 CRD 指定的名称。
    • hostnames 必须设置为通配符“*”。
  2. 打开替换文件,然后执行下一步中所述的更改。
  3. 对于每个环境组,将 ApigeeRoute 名称添加到 additionalGateways 属性。例如:
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. 保存 CRD 文件。例如:ApigeeRoute.yaml
  5. 将 CRD 应用到集群:
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. 将更改应用到 virtualhosts
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT

支持非 SNI 和 HTTP 客户端

本部分介绍如何同时启用非 SNI(端口 443)和 HTTP(端口 80)客户端,以用于 Apigee Hybrid。

  1. 创建 ApigeeRoute 自定义资源定义 (CRD)。例如:
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 443
        protocol: HTTPS
        tls:
          credentialName: credential_name
          mode: SIMPLE
          #optional
          minProtocolVersion: TLS_AUTO
      - number: 80
        protocol: HTTP
      selector:
        app: istio-ingressgateway
      enableNonSniClient: true

    其中:

    • route_name 是您为 CRD 指定的名称。
    • hostname 必须设置为通配符“*”。
    • credential_name 是 Kubernetes Secret 的名称,它部署到包含您的虚拟主机的 TLS 凭据的集群。您可以使用以下 kubectl 命令查找凭据名称:
      kubectl -n apigee get ApigeeRoutes -o=yaml | grep credentialName
  2. 打开替换文件,然后执行下一步中所述的更改。
  3. 对于每个环境组,将 ApigeeRoute 名称添加到 additionalGateways 属性。例如:
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. 保存 CRD 文件。例如:ApigeeRoute.yaml
  5. 将 CRD 应用到集群:
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. 将更改应用到 virtualhosts
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT