Google Cloud 上的 Citrix ADC CPX、Citrix Ingress Controller 和 Application Delivery Management

GCP K8 架构和组件的 Citrix 产品概述

GCP 的五个主要Citrix 组件

  1. Citrix ADC VPX 作为第一层 ADC,用于基于入口的互联网客户端流量。

    借助 GCP 中的 VPX 实例,您可以利用 GCP 计算功能并使用 Citrix 负载平衡和流量管理功能来满足您的业务需求。您可以在 GCP 中将 VPX 部署为独立实例。支持单网卡和多网卡 (NIC) 配置。

  2. Kubernetes 集群使用 Google Kubernetes 引擎 (GKE) 组成容器平台。

    Kubernetes 引擎是一个托管的生产就绪环境,用于部署容器化应用程序。它支持快速部署和管理您的应用程序和服务。

  3. 使用 YAML 文件库部署示例 Citrix Web 应用程序。

    Citrix 提供了一个示例微服务 Web 应用程序,用于在 GCP 上测试双层应用程序拓扑。我们还在示例文件中包含了以下组件以进行概念验证:

    • Kubernetes YAML 文件中的 Hotdrink Web 服务示例
    • Kubernetes YAML 文件中的 Colddrink Web 服务示例
    • Kubernetes YAML 文件中的 Guestbook Web 服务示例
    • Kubernetes YAML 文件中的 Grafana 图表服务示例
    • Kubernetes YAML 文件中的 Prometheus 日志记录服务示例

    GCP

  4. 将用于第 1 层 Citrix ADC 自动化的 Citrix Ingress Controller 部署到 GKE 集群中。

    围绕 Kubernetes 构建的 Citrix Ingress Controller 会根据入口资源配置自动配置一个或多个 Citrix ADC。入口控制器是一种控制器,它监视 Kubernetes API 服务器是否有入口资源的更新,并相应地重新配置入口负载均衡器。Citrix Ingress Controller 可以直接使用 YAML 文件部署,也可以通过 Helm Charts 部署。

    GCP

    Citrix 为第 1 层 VPX 实例的 Citrix Ingress Controller 自动化提供了示例 YAML 文件。这些文件在第 1 层 VPX 上自动执行多项配置,包括:

    • 重写策略和操作
    • 响应者策略和行动
    • 内容切换 URL 规则
    • 添加/删除 CPX 负载平衡服务

    GCP 的 Citrix Ingress Controller YAML 文件位于此处: https://github.com/citrix/example-cpx-vpx-for-kubernetes-2-tier-microservices/tree/master/gcp

GCP 上的两层入口部署

在双层入口部署中,在 Kubernetes 集群(第 1 层)之外部署 Citrix ADC VPX/MPX,在 Kubernetes 集群(第 2 层)内部署 Citrix ADC CPX。

第 1 级 VPX/MPX 将对 Kubernetes 集群内的第 2 层 CPX 进行负载平衡。无论平台如何,无论是 Google Cloud、Amazon Web Services、Azure 还是本地部署,这都是广泛遵循的通用部署模式。

第 1 层 VPX/MPX 的自动化

第 1 层 VPX/MPX 会自动对第 2 层 CPX 进行负载平衡。Citrix Ingress Controller 通过在 Kubernetes 集群内作为容器运行来完成自动化配置。它为第 1 层 VPX/MPX 配置单独的入口类,以便该配置不会与其他入口资源重叠。

GCP


Citrix 部署概述

在 GCP 上安装和配置第 1 层 Citrix ADC

您可以使用以下方法之一部署 Citrix ADC:

现在,您需要使用 3-NIC GDM 模板部署 Citrix VPX (tier-1-adc)。

必备条件(强制性):

  1. 仅使用您的 Citrix 邮件 ID 创建 GCP 帐户 http://console.cloud.google.com

  2. 在 GCP 控制台上创建 cnn-selab-atl 作为项目名称: GCP

  3. 在设备上安装 gcloud 实用程序。点击链接找到该实用程序: https://cloud.google.com/sdk/install

  4. 使用 gcloud API gcloud auth login 对您的 Google 帐户进行身份验证。

  5. 在您的客户端上安装 kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/

  6. gcloud 实用程序上运行以下命令以创建映像。

    gcloud compute images create netscaler12-1 --source-uri=gs://tme-cpx-storage/NSVPX-GCP-12.1-50.28_nc.tar.gz --guest-os-features=MULTI_IP_SUBNET
    <!--NeedCopy-->
    

    创建映像可能需要一段时间。创建映像后,它会显示在 GCP 控制台的“计算”>“计算引擎”下。

在 GCP 上部署 Citrix VPX(第 1 层 adc)

  1. GCP VPC 实例: 出于安全考虑,解决外部、内部和 DMZ 网络的分离问题。我们必须创建三个 NIC,如下表所示:

    网络 注意
    192.168.10.0/24 管理网络 (vpx-snet-mgmt)
    172.16.10.0/24 客户端网络 (vpx-snet-vip)
    10.10.10.0/24 服务器网络 (vpx-snet-snip)

    注意:

    在部署任何虚拟机实例之前,先构建三臂网络 VPC。

    VPC 可以通过 SDK 使用 gcloud API 或通过Google Cloud Platform 控制台创建

    gcloud API 的 VPC

    为管理或 NSIP 流量创建 VPC

     gcloud compute --project=cnn-selab-atl networks create vpx-snet-mgmt --subnet-mode=custom
     gcloud compute --project=cnn-selab-atl networks subnets create vpx-snet-mgmt --network=vpx-snet-mgmt --region=us-east1 --range=192.168.10.0/24
     <!--NeedCopy-->
    

    为客户端或 VIP 流量创建 VPC

     gcloud compute --project=cnn-selab-atl networks create vpx-snet-vip --subnet-mode=custom
     gcloud compute --project=cnn-selab-atl networks subnets create vpx-snet-vip --network=vpx-snet-vip --region=us-east1 --range=172.16.10.0/24
     <!--NeedCopy-->
    

    为服务器或 SNIP 流量创建一个 VPC,用于托管 kubernetes 集群

     gcloud compute --project=cnn-selab-atl networks create vpx-snet-snip --subnet-mode=custom
     gcloud compute --project=cnn-selab-atl networks subnets create vpx-snet-snip --network=vpx-snet-snip --region=us-east1 --range=10.10.10.0/24
     <!--NeedCopy-->
    

    *由 GCP GUI 控制台提供的 VPC

    在 Google 控制台中,选择 网络 > VPC 网络 > 创建 VPC 网络 ,然后输入必填字段,如下所示。然后单击“创建”。

    GCP

    同样,为客户端和服务器端 NIC 创建 VPC 网络以创建三个子网。

    注意:

    所有三个 VPC 网络都应位于同一个区域,在本例中为 us-east1。

    GCP

  2. VPC网络下创建三个网络和三个子网后,请使用 GDM 模板部署 Citrix ADC VPX 实例。确保 configuration.ymltemplate.py 位于同一个文件夹或目录中。使用 Google SDK 中的以下命令部署实例。

     gcloud deployment-manager deployments create tier1-vpx --config configuration.yml
     <!--NeedCopy-->
    
  3. 成功部署后,前往 计算引擎 查看 c itrix-adc-tier1-vpx 部分,然后验证内部 IP。

GCP

Citrix Ingress Controller 可以在第 1 层 VPX 中自动配置静态路由。配置子网 IP (SNIP) 地址,该地址应属于 Kubernetes 集群的相同子网/虚拟私有云。

注意:

部署的第 1 层 VPX/MPX 将对 Kubernetes 集群内的 CPX 进行负载平衡。在第 1 层 VPX 中配置 SNIP。

在第 1 层 VPX 上的 PuTTY 会话中,完成以下命令以添加 SNIP 并启用对 SNIP 的管理访问权限:

clear config -force full
add ns ip 10.10.10.20 255.255.255.0 -type snip -mgmt enabled
enable ns mode mbf
<!--NeedCopy-->

使用 GKE 部署 Kubernetes 集群

人们可以通过 Google Cloud SDK 或 Google 云端平台 GUI 控制台部署 Kubernetes 集群。

用于创建 k8s 集群的 Gcloud API 命令

gcloud beta container --project "cnn-selab-atl" clusters create "k8s-cluster-with-cpx" --zone "us-east1-b" --username "admin" --cluster-version "1.11.7-gke.12" --machine-type "n1-standard-1" --image-type "COS" --disk-type "pd-standard" --disk-size "100" --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --num-nodes "3" --enable-cloud-logging --enable-cloud-monitoring --no-enable-ip-alias --network "projects/cnn-selab-atl/global/networks/vpx-snet-snip" --subnetwork "projects/cnn-selab-atl/regions/us-east1/subnetworks/vpx-snet-snip" --addons HorizontalPodAutoscaling,HttpLoadBalancing --enable-autoupgrade --enable-autorepair
<!--NeedCopy-->

Google Cloud Platform GUI 控制台步骤

  1. 在 GCP 控制台上搜索 Kubernetes 引擎,然后点击 创建集群

    GCP

  2. 在您的 VPX SNIP 所在的同一个子网中创建一个集群(vpx-snet-snip)。该集群自动将配置从 K8s 集群中的 Citrix Ingress Controller 推送到第 1 层 ADC。

    GCP

    GCP

  3. 单击“高级选项”将子网更改为 vpx-snet-snip,然后选择以下字段。

    GCP

  4. 要从云 SDK 访问此集群,请单击 Kubernetes 连接到集群 按钮并将命令粘贴到云 SDK 中。

    GCP

  5. 通过运行以下命令验证 GKE 集群部署:

kubectl get nodes
<!--NeedCopy-->

GCP


使用示例 YAML 文件库部署示例应用程序

Citrix ADC 提供两层架构部署解决方案,用于对部署在微服务中并通过 Internet 访问的企业级应用程序进行负载平衡。第 1 层有大量负载均衡器,例如 VPX/SDX/MPX,用于对南北流量进行负载均衡。第 2 层具有 CPX 部署,用于管理微服务和负载均衡东西向流量。

  1. 如果您在 GKE 中运行集群,请确保您已使用集群角色绑定来配置集群管理员。您可以使用以下命令执行此操作。

     kubectl create clusterrolebinding citrix-cluster-admin --clusterrole=cluster-admin --user=<email-id of your google account>.
     <!--NeedCopy-->
    
  2. 访问您拥有部署 YAML 文件的当前目录。运行以下命令获取节点状态。

     kubectl get nodes
     <!--NeedCopy-->
    

    GCP

  3. 创建命名空间:

     kubectl create -f namespace.yaml
     <!--NeedCopy-->
    

    验证命名空间命令:

     kubectl get namespaces
     <!--NeedCopy-->
    

    GCP

  4. 在默认命名空间中部署 rbac.yaml。

     kubectl create -f rbac.yaml
     <!--NeedCopy-->
    
  5. 使用以下命令为 hotdrink、colddrink 和 guestbook 微服务部署 CPX。

     kubectl create -f cpx.yaml -n tier-2-adc
     kubectl create -f hotdrink-secret.yaml -n tier-2-adc
     <!--NeedCopy-->
    
  6. 部署 three-hotdrink 饮料微服务,即采用发夹架构的 SSL 型微服务。

     kubectl create -f team_hotdrink.yaml -n team-hotdrink
     kubectl create -f hotdrink-secret.yaml -n team-hotdrink
     <!--NeedCopy-->
    
  7. 部署 colddrink 饮料微服务,即 SSL_TCP 类型的微服务。

     kubectl create -f team_colddrink.yaml -n team-colddrink
     kubectl create -f colddrink-secret.yaml -n team-colddrink
     <!--NeedCopy-->
    
  8. 部署留言簿——一个 NoSQL 类型的微服务。

     kubectl create -f team_guestbook.yaml -n team-guestbook
     <!--NeedCopy-->
    
  9. 验证为以上三个应用程序部署的 CPX。首先,获取部署为 tier-2-adc 的 CPX 容器,然后获得 CPX 的 CLI 访问权限。

    ``` 要在 tier-2-adc 命名空间中获取 CPX pod,请输入:kubectl get pods-n tier-2-adc

    要获得 CPX pod(hotdrinks-cpx pod)的 CLI 访问权限(bash),请输入:kubectl exec -it "copy and paste hotdrink CPX pod name from the above step" bash -n tier-2-adc

    例如,

    kubectl exec -it cpx-ingress-hotdrinks-768b674f76-pcnw4 bash -n tier-2-adc

    要检查 CS 虚拟服务器是否在 hotdrink-cpx 中运行,请在 root 访问 CPX 后输入以下命令:cli-script"sh csvs"

    例如,

    root@cpx-ingress-hotdrinks-768b674f76-pcnw4:/# cli_script.sh "sh csvs"

  10. 将 VPX 入口和入口控制器部署到第 2 层命名空间,该命名空间会自动配置 VPX。Citrix Ingress Controller (CIC) 可自动执行第 1 层 adc (VPX)。

     kubectl create -f ingress_vpx.yaml -n tier-2-adc
     kubectl create -f cic_vpx.yaml -n tier-2-adc
     <!--NeedCopy-->
    
  11. 在本地计算机的主机文件中添加 DNS 条目,以便通过 Internet 访问微服务。

    对于 Windows 客户端,请访问: C:\Windows\System32\drivers\etc\hosts

    对于 macOS 客户端,在终端中输入: sudo nano /etc/hosts

    在主机的文件中添加以下条目并保存该文件。

     hotdrink.beverages.com   xxx.xxx.xxx.xxx (static-external-traffic-ip-tier1-vpx)
     colddrink.beverages.com  xxx.xxx.xxx.xxx (static-external-traffic-ip-tier1-vpx)
     guestbook.beverages.com  xxx.xxx.xxx.xxx (static-external-traffic-ip-tier1-vpx)
     grafana.beverages.com    xxx.xxx.xxx.xxx (static-external-traffic-ip-tier1-vpx)
     prometheus.beverages.com xxx.xxx.xxx.xxx (static-external-traffic-ip-tier1-vpx)
     <!--NeedCopy-->
    
  12. 现在,您可以通过Internet访问每个应用程序。例如,https://hotdrink.beverages.com

    GCP


为示例应用程序启用重写和响应程序策略

现在是时候通过自定义资源定义 (CRD) 在 VPX 上推送重写和响应程序策略了。

  1. 部署 CRD 以将“重写”和“响应程序”策略推送到默认命名空间中的 Tier-1-adc。
   kubectl create -f crd_rewrite_responder.yaml
   <!--NeedCopy-->
  1. 黑名单 URLhotdrink.beverages.com 上配置响应者策略以阻止对咖啡页面的访问。
   kubectl create -f responderpolicy_hotdrink.yaml -n tier-2-adc
   <!--NeedCopy-->

部署响应程序策略后,请访问 hotdrink.beverages.com 上的咖啡页面。然后您会收到以下消息。

GCP

  1. 标题插入colddrink.beverages.com 上的重写策略配置在标头中插入会话 ID。
   kubectl create -f rewritepolicy_colddrink.yaml -n tier-2-adc
   <!--NeedCopy-->

部署重写策略后,在浏览器上启用开发者模式后访问 colddrink.beverages.com。在 Chrome 中,按 F12 并保留登录网络类别以查看会话 ID,该会话 ID 由 Tier-1-adc (VPX) 上的重写策略插入。

GCP


开源工具集

  1. 部署云原生计算基金会 (CNCF) 监视工具,例如 Prometheus 和 Grafana 来收集 ADC 代理统计数据。

     kubectl create -f monitoring.yaml -n monitoring
     kubectl create -f ingress_vpx_monitoring.yaml -n monitoring
     <!--NeedCopy-->
    

Prometheus 日志聚合器

  1. 登录 http://grafana.beverages.com 并完成以下一次性设置。

    1. 使用管理员凭据登录门户。
    2. 单击“添加数据源”,然后选择 Prometheus 数据源。
    3. 配置以下设置,然后单击“保存并测试”按钮。

    GCP

Grafana 可视化仪表板

  1. 从左侧面板中,选择“导入”选项并上载文grafana_config.jsonyamlFiles 夹中提供的文件。现在您可以看到 Grafana 控制面板,其中列出了基本 ADC 统计数据。

GCP


删除部署

  1. 要删除 Citrix VPX(第 1 层 adc)部署,请前往 Google SDK CLI 控制台删除实例:

    gcloud deployment-manager deployments delete tier1-vpx
    <!--NeedCopy-->
    
  2. 要删除 GKE Kubernetes 集群,请前往 GCP 控制台,选择 kubernetes 集群,然后单击“删除”以清除集群。

    GCP