本主题介绍了如何启用非 SNI 客户端、HTTP 客户端,以及同时综合使用这两者用于 Apigee Hybrid。
如何配置非 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: apigee-ingressgateway enableNonSniClient: true
其中:
- route_name 是您为自定义资源 (CR) 指定的名称。
- credential_name 是 Kubernetes Secret 的名称,它部署到包含您的虚拟主机的 TLS 凭据的集群。您可以使用以下
kubectl
命令查找凭据名称:kubectl -n apigee get ApigeeRoutes -o=yaml | grep credentialName
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
:Helm
helm upgrade ENV_GROUP apigee-virtualhost/ \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE.yaml
apigeectl
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.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
:Helm
helm upgrade ENV_GROUP apigee-virtualhost/ \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE.yaml
apigeectl
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.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
:Helm
helm upgrade ENV_GROUP apigee-virtualhost/ \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f OVERRIDES_FILE.yaml
apigeectl
$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.yaml --settings virtualhosts --env $ENVIRONMENT