将 Google Kubernetes Engine Ingress 用于应用程序负载均衡器
您可以使用集群级入口控制器将流量路由至 Google Kubernetes Engine (GKE) 上的 ArcGIS Enterprise 部署。 有关详细信息,请参阅集群级入口控制器。
此工作流创建的经典应用程序负载均衡器会在后端服务超时值过期后终止活动和空闲的 WebSocket 连接。 这可能会中断使用需要 WebSocket 连接的功能(如工作流管理服务或 Notebook 服务)的客户端连接。 虽然已终止的 WebSocket 连接可以重新建立,但客户端应用程序返回的超时错误可能会中断用户工作流。 有关详细信息,请参阅 Google Cloud Platform 文档。
在创建集群级入口控制器之前,请评估此选项的好处是否超过对您组织 WebSocket 连接可能造成的中断。 如果保持 WebSocket 连接持续开放对您很重要,请在运行 ArcGIS Enterprise on Kubernetes 部署脚本时创建 LoadBalancer 服务,而不是使用集群级入口控制器。
注:
请在创建 ArcGIS Enterprise 组织之前完成此工作流。 在部署并配置负载均衡器后,您可以通过浏览器访问 ArcGIS Enterprise Manager。
先决条件
查看常规先决条件并确保满足以下 GKE 特定先决条件:
您必须已在 GKE 中创建集群。
必须在您的集群上启用 HTTP 负载平衡插件。
必须在您的客户端计算机上安装 Kubectl。 确保您可以连接到与已创建的集群相关联的 Kubernetes API 服务器并向其发出命令。
必须在您的客户端计算机上安装 Google Cloud Platform CLI。 确保您可以对 GKE 集群所在的工程进行身份验证。
您必须已在 Google Cloud 工程中创建了自我管理的证书。 如果该证书存在于您的工程内,请记下其名称。 或者,可以在 Kubernetes 密钥内指定此证书以供以后使用,需要在部署命名空间中创建该证书。
向集群内入口控制器服务添加注记
在 Google Kubernetes Engine 上完成 ArcGIS Enterprise 的初始部署后,为集群内入口控制器服务添加注记。
请运行以下命令向已部署的服务添加注记,以确保使用 TLS 通信:
kubectl annotate svc arcgis-ingress-nginx -n <namespace> cloud.google.com/app-protocols='{"https":"HTTPS"}'向集群内控制器服务添加附加注记,为您的组织配置运行状况检查。
您可以使用 BackendConfig CRD 来完成此步骤。
在客户端工作站上的文本编辑器中复制并保存以下 YAML 数据。
在此示例中,该文件保存为
backendconfig.yaml。apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: my-backendconfig namespace: <deploymentNamespace> spec: timeoutSec: 600 healthCheck: type: HTTPS requestPath: /<context>/admin port: 443注:
可以将其他运行状况检查参数添加至 BackendConfig 对象 YAML 以满足组织需求。 要了解可添加至 BackendConfig 规范的其他运行状况检查参数,请参阅 Google Cloud 文档。 您将需要更新
requestPath字段内context的值以匹配在部署期间指定的上下文路径。可以使用以下命令创建 BackendConfig 对象:
kubectl apply -f backendconfig.yaml可以使用以下注记来注记集群内入口控制器服务:
kubectl annotate svc arcgis-ingress-nginx -n <namespace> cloud.google.com/backend-config='{"default": "my-backendconfig"}'这将确保 GKE 入口控制器部署的负载均衡器使用先前创建的运行状况检查。
创建 Ingress 对象
将注记添加至集群内入口控制器服务后,请使用以下步骤创建 Ingress 对象:
打开包含在
layer-7-templates文件夹中的模板,或将以下示例复制到客户端计算机的文件中:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: arcgis-enterprise-ingress namespace: <deploymentNamespace> annotations: kubernetes.io/ingress.class: "gce" kubernetes.io/ingress.allow-http: "false" ingress.gcp.kubernetes.io/pre-shared-cert: "<certificateName>" labels: id: custom-ingress-resource spec: defaultBackend: service: name: arcgis-ingress-nginx port: number: 443 rules: - host: <deploymentFQDN> http: paths: - path: /<context> pathType: Prefix backend: service: name: arcgis-ingress-nginx port: number: 443替换以下值:
certificateName- 提供新上传的证书的名称。deploymentFQDN- 提供在部署期间指定的完全限定域名。namespace- 提供您部署 ArcGIS Enterprise on Kubernetes 的命名空间。context- 提供在部署期间指定的上下文。
将文件保存到客户端工作站。
例如,
ingress.yaml。通过执行以下操作之一创建入口对象:
可以使用以下命令将入口 YAML 数据应用于您的集群:
kubectl apply -f ingress.yaml在静默运行部署脚本时,将
CLUSTER_INGRESS_CONTROLLER_YAML_FILENAME设置为入口 YAML 文件的所在位置。
完成此工作流后,将创建一个名为 arcgis-enterprise-ingress 的 Ingress 对象。 创建此 Ingress 对象后,GKE Ingress Controller 会在您的 Google Cloud 工程中配置一个应用程序负载均衡器。 它还会创建一个关联的网络端点组,其中包含后端集群内 NGINX 入口控制器 Pod 的 IP 地址。 负载均衡器创建完成后,即可访问您的 ArcGIS Enterprise 部署。 随后,您可以创建一个 A 记录,将客户端从初始部署期间指定的完全限定域名指向已配置的负载均衡器。
注:
可能需要刷新 arcgis-ingress-controller 部署,才能通过新创建的 Ingress 建立正确的连接。 如果在创建 Ingress 后访问 ArcGIS Enterprise Manager 时遇到错误,请尝试运行以下命令:
kubectl rollout restart deployment/arcgis-ingress-controller -n <deploymentNamespace>