本主题介绍了如何启用非 SNI 客户端、HTTP 客户端,以及同时综合使用这两者用于 Apigee Hybrid。
此配置适用于 Apigee 入站流量网关和 Anthos Service Mesh。
如何配置非 SNI 客户端
本部分介绍如何在 Apigee Hybrid 中支持非 SNI(服务器名称指示)客户端。非 SNI 客户端使用端口 443,如果要将混合运行时实例与 Google 集成,则需要使用该端口 Cloud Load Balancing 或不支持 SNI 的客户端。- 创建 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: APP_NAME enableNonSniClient: true
其中:
- ROUTE_NAME 是您为 CRD 指定的名称。
- CREDENTIAL_NAME 是 Kubernetes Secret 的名称,它部署到包含您的虚拟主机的 TLS 凭据的集群。您可以使用以下
kubectl
命令查找凭据名称:kubectl -n apigee get ApigeeRoutes -o=yaml | grep credentialName
- APP_NAME 用于标识入站流量网关的类型:
apigee-ingressgateway
(对于 Apigee 入站流量网关)。istio-ingressgateway
(适用于 Anthos Service Mesh)。
hostnames
必须设置为通配符"*"
。
- 打开替换文件,然后执行下一步中所述的更改。
- 对于每个环境组,将 ApigeeRoute 名称添加到
additionalGateways
属性。例如:virtualhosts: - name: default sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.pem additionalGateways: ["route_name"]
- 保存 CRD 文件。例如:
ApigeeRoute.yaml
- 将 CRD 应用到集群:
kubectl apply -f ApigeeRoute.yaml -n apigee
- 将更改应用到
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 客户端。
- 创建 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
必须设置为通配符“*”。
- 打开替换文件,然后执行下一步中所述的更改。
- 对于每个环境组,将 ApigeeRoute 名称添加到
additionalGateways
属性。例如:virtualhosts: - name: default sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.pem additionalGateways: ["route_name"]
- 保存 CRD 文件。例如:
ApigeeRoute.yaml
- 将 CRD 应用到集群:
kubectl apply -f ApigeeRoute.yaml -n apigee
- 将更改应用到
virtualhosts
:$APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT
支持非 SNI 和 HTTP 客户端
本部分介绍如何同时启用非 SNI(端口 443)和 HTTP(端口 80)客户端,以用于 Apigee Hybrid。
- 创建 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
- 打开替换文件,然后执行下一步中所述的更改。
- 对于每个环境组,将 ApigeeRoute 名称添加到
additionalGateways
属性。例如:virtualhosts: - name: default sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.pem additionalGateways: ["route_name"]
- 保存 CRD 文件。例如:
ApigeeRoute.yaml
- 将 CRD 应用到集群:
kubectl apply -f ApigeeRoute.yaml -n apigee
- 将更改应用到
virtualhosts
:$APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT