先进的概念

Citrix ADC CPX在Kubernetes与Diamanti和Nirmata验证参考设计

要测试的特性和功能

测试用例:CPX作为入口控制器,南北和发夹东西向装置:

所有测试用例的设置(VPX除外):

  • 集群中的两个cpx (CPX-1, CPX-2)
  • ADM作为授权服务器
  • 普罗米修斯出口容器在一个集群
  • Prometheus服务器和Grafana(作为Kubernetes的pod或Kubernetes服务器的外部)
  • 多个前端应用程序
  • 几个后端应用程序

一、VPX为南北

  1. SDX前端Diamanti平台上的VPX

    • 测试SSL卸载,并为每个SSL连接插入X-Forward重新加密
    • 在SSL会话上插入X-Forward

2CPX为南北设备

  1. CPX-1。使用指定的入口类设置支持两个或三个HTTPS应用程序的HTTPS入口:

    • 演示创建多个内容切换策略:每个前端应用程序一个。
    • 每个CPX演示多个通配符证书:每个应用程序一个通配符证书。
    • 演示CPX卸载和重新加密前端应用程序的流量。
    • 演示不同的负载均衡算法。
    • 向一个吊舱演示持久性。
  2. CPX-1。使用指定的入口类设置单独的TCP入口:

    • 插入TCP应用程序,如MongoDB。
    • 显示TCP VIP的创建。
    • 显示TCP客户端流量击中MongoDB pod。
    • 显示默认TCP应用程序运行状况检查。
  3. CPX-1。使用指定的入口类建立单独的TCP-SSL入口:

    • 演示TCP-SSL VIP的SSL卸载和重新加密。
    • 重复测试案例2。
  4. 每个应用的CPX。使用单独的入口类:

    • 使用只支持一个应用程序的CPX-2重复测试用例1-3。
  5. 每队CPX。入口类的使用:

    • 为2个团队分配不同的入口职业。
    • 演示测试用例1作为CPX可以为单个团队配置入口规则的证据。
  6. 自动缩放前端吊舱:

    • 增加前端吊舱的流量,并确保吊舱自动缩放。
    • 显示CPX-1向服务组添加了新的pod。
    • 演示HTTPS入口VIP。
  7. 4-7 vCPU支持:

    • 配置CPX-1为4或7个vcpu。
    • 展示HTTPS TPS的性能测试,全程加密BW。

3CPX作为发夹东西装置

  1. CPX-1。为南北通信创建HTTPS入口,如第I.1节所述:

    • 将后端应用程序暴露给前端应用程序。
    • 显示两个应用程序之间的流量。
    • 将后端应用程序公开给另一个后端应用程序。
    • 显示应用程序之间的流量。
  2. CPX-1。按照步骤1的说明操作。同时,显示端到端加密:

    • 后端应用程序到后端应用程序,使用CPX-1进行卸载和重新加密。
  3. 自动缩放后端pod:

    • 演示CPX-1将后端自动伸缩后端pod添加到服务组。

四、CPX与普罗米修斯、Grafana的整合

  1. 将Prometheus容器插入到Kubernetes集群中:

    • 为每个应用程序配置导出的推荐计数器容器。
    • 演示导出容器向Prometheus服务器发送计数器数据。
    • 显示Grafana仪表板,说明来自Prometheus服务器的数据来自CPXs。
    • 我们的目标是展示开发人员可以使用在DevOps中广泛使用的云原生工具。
  2. 演示集成Kubernetes滚动部署:

    • 在Nirmata中插入新版本的应用程序。
    • 显示Kubernetes将新应用版本部署到集群中。
    • 演示CPX响应来自Kubernetes的滚动部署命令,将100%的流量从旧版本的应用程序转移到新版本的应用程序。

Citrix ADC CPX部署方案

  1. 自定义协议:默认情况下,CITRIX INGRESS CONTROLLER自动使用默认协议(HTTP/SSL)进行配置。CITRIX INGRESS CONTROLLER支持使用注释配置自定义协议(TCP/SSL-TCP/UDP)。

    注释:

    ingress.citrix.com/insecure-service-type:“tcp”[选择LB协议注释]

    ingress.citrix.com/insecure-port: 53[支持自定义端口的注释]

  2. CS/LB/Servicegroup参数调优:缺省情况下,CITRIX INGRESS CONTROLLER为ADC配置默认参数。参数可在NetScaler ADC实体参数(磅/ servicegroup)注释。

    注释:

    LB-Method:ingress.citrix.com/lbvserver:{"应用程序1 ":{“lbmethod”:此“循环”}}”

    持久性:ingress.citrix.com/lbvserver:{"应用程序1 ":{“persistencetype”:“sourceip}}”

    硝基API

  3. 每个应用SSL加密:CITRIX INGRESS CONTROLLER可以在智能注释的帮助下选择性地为应用程序启用SSL加密。

    注释:

    ingress.citrix.com/secure_backend: '{"web-backend": "True"}[选择性地为每个应用程序启用加密的注释]

  4. 缺省证书:CITRIX INGRESS CONTROLLER可以采用默认的cert作为参数。如果入口定义没有秘密,则采用默认证书。秘密需要在名称空间中创建一次,然后该名称空间中的所有入节点都可以使用它。

  5. Citrix多入口类支持:默认情况下,CITRIX INGRESS CONTROLLER监听k8s集群中的所有入口对象。我们可以通过入口类注释来控制ADC (Tier-1 MPX/VPX & Tier-2 CPX)的配置。这有助于每个团队独立地管理ADC的配置。入口类可以帮助部署解决方案,为特定的名称空间和一组名称空间配置ADC。与其他供应商提供的支持相比,该支持更加通用。

    注释:

    kubernetes.io / ingress.class:“citrix”[通知CITRIX INGRESS CONTROLLER只配置属于特定类的INGRESS]

  6. 可见性:Citrix美丽解决方案集成了cncf像prometheus /Grafana这样的可视性工具用于度量收集,以支持更好的调试和分析。Citrix prometheus出口商可以使指标可用的prometheus可视性与Grafana作为时间序列图表。

有关使用微服务体系结构的更多信息,请参见README.md文件在GitHub。你可以在.yaml文件配置文件夹中。

POC故事线

有三个团队在kubernetes集群上运行他们的应用程序。在citrix入口类的帮助下,每个团队的配置在不同的cpx上独立管理。

每个团队的应用程序都运行在单独的名称空间中(team-hotdrink、team-colddrink和team-redis),所有的CPX都运行在CPX名称空间中。

team-hotdrinkSSL/HTTP入口,持久化,lbmethod,每个应用程序加密/描述,default-cert。

team-colddrinkSSL-TCP入口

team-redisTCP入口

POC的设置

image-cpx-deployment-01

应用程序流

HTTP / SSL / SSL-TCP用例:

image-cpx-deployment-02

TCP的用例:

image-cpx-deployment-03

获取docker图像

提供的YAML命令从码头存储库获取映像。

映像也可以提取并存储在本地存储库中。控件可以使用它们图像YAML中的参数。


使用Nirmata逐步应用程序和CPX部署

  1. 在YAML中上传集群角色和集群角色绑定,并使用Nirmata (rbac.yaml)在集群中应用它们。

    1. 集群选项卡。
    2. 选择集群。
    3. 在设置中,应用YAML使用yaml选择。
  2. 创建运行CPX和应用程序的环境。

    1. 环境选项卡。
    2. 点击添加环境选项卡。
      • 选择集群并在共享名称空间中创建环境。

      image-cpx-deployment-04

    3. 为不同的团队创建以下运行Prometheus、CPX和应用程序的环境。
      • 创建环境:cpx
      • 创造环境:团队热饮
      • 创造环境:团队冷饮
      • 创建环境:team-redis
  3. 上传.yaml应用程序使用Nirmata。

    1. 目录选项卡。
    2. 点击添加应用程序
    3. 点击添加添加应用程序。

      添加应用程序:team-hotdrink (team_hotdrink.yaml)。应用程序名称:team-hotdrink

      添加应用程序:team-colddrink (team_coldrink.yaml)。应用程序名称:team-colddrink

      添加应用程序:team-redis (team_redis.yaml)。应用程序名称:team-redis

      添加应用程序:cpx-svcacct (cpx_svcact .yaml)。应用名称:cpx-svcacct。

      注意:

      带有内置CITRIX INGRESS CONTROLLER的CPX需要在其运行的名称空间中有一个服务帐户。对于Nirmata中的当前版本,使用cpx_svcacct.yaml在CPX环境中。

      添加应用程序:cpx (cpx_wo_sa.yaml)。应用程序名称:cpx。

  4. 使用Nirmata运行CPX。

    1. 环境选项卡,选择正确的环境。
    2. 点击运行应用程序运行应用程序。
    3. 在cpx环境中,运行cpx-svcacct应用程序。选择cpx-svcacct运行名cpx-svcacct应用程序目录
    4. 在cpx环境中,运行cpx应用程序。中选择cpx应用程序目录

    image-cpx-deployment-05

    注意:

    CPX部署需要一些小的变通方法,因为设置使用的是早期版本的Nirmata。

    1. 创建CPX部署时,不要设置serviceAccountName.的serviceAccountName可以稍后添加。作为解决方案,自动重新部署pod。
    2. 直接在环境中为入口导入TLS秘密。这确保了类型字段被保留。
    1. 运行应用程序后,转到CPX应用程序。
    2. 部署> StatefulSets & DaemonSets选项卡,单击cpx-ingress-colddrinks部署。
    3. 在下一页上,编辑豆荚模板.输入CPX服务帐户
    4. 回到CPX应用程序。
    5. 重复相同的过程cpx-ingress-hotdrinks而且cpx-ingress-redis部署。

    应用服务帐户,重新部署pods。等待pod出现,并确认服务帐户是否已申请。

    可以在Diamanti集群中使用以下命令进行验证。

    [diamanti@diamanti-250 ~]$ kubectl get deployment -n cpx -o yaml | grep -i account serviceAccount: cpx serviceAccountName: cpx serviceAccount: cpx 

    注意:如果serviceAccount不适用,则取消CPX舱。重新创建它的部署serviceAccount

    image-cpx-deployment-06

  5. 使用Nirmata运行应用程序。

    team-hotdrink应用程序:

    1. 环境选项卡,选择正确的环境:team-hotdrink
    2. team-hotdrink环境,运行team-hotddrink使用team-hotdrink运行的名字。选择team-hotdrink应用程序目录
    3. team-hotdrink应用程序。2 .单击界面右上角的设置并选择导入到应用程序.上传hotdrink-secret.yaml

    image-cpx-deployment-07

    team-colddrink应用程序:

    1. 环境选项卡,选择正确的环境:team-colddrink
    2. team-colddrink环境,运行team-coldddrink应用程序与team-colddrink运行的名字。选择team-hotdrink应用程序目录
    3. team-colddrink应用程序。2 .单击界面右上角的设置并选择导入到应用程序.上传colddrink-secret.yaml

    team-redis应用程序:

    1. 环境选项卡,选择正确的环境:team-redis
    2. team-colddrink环境,使用team-redis运行的名字。选择team-redis应用程序目录
      • team-redis环境,使用team-redis运行的名字。

VPX上的命令公开Tier-2 CPX

第一级VPX应该做ssl加密/描述,并在发送到第二级CPX时插入X-forward报头。一级配置需要手动完成。在servicegroup中使用-cip ENABLED可以插入X-Forward报头。开放config.txt

创建一个csverver:

上传certkeyCitrix ADC:wild.com-key.pem, wild.com-cert.pem

add cs vserver frontent_grafana HTTP  80 -cltTimeout 180 

在一级VPX上暴露www.hotdrinks.com, www.colddrinks.com, www.guestbook.com:

添加serviceGroup team_hotdrink_cpx cip启用SSL添加serviceGroup team_colddrink_cpx cip启用SSL添加serviceGroup team_redis_cpx HTTP添加SSL certKey cert cert“wild-hotdrink.com-cert.pem”关键“wild-hotdrink.com-key.pem”加磅vserver team_hotdrink_cpx HTTP 0.0.0.0 0加磅vserver team_colddrink_cpx HTTP 0.0.0.0 0加磅vserver team_redis_cpx HTTP 0.0.0.0 0添加cs vserver frontent SSL 10.106.73.218 443添加cs操作team_hotdrink_cpx -targetLBVserver team_hotdrink_cpx添加cs操作team_colddrink_cpx -targetLBVserver team_redis_cpx添加cs动作team_redis_cpx -targetLBVserver team_redis_cpx添加cs策略team_hotdrink_cpx -rule "HTTP.REQ.HOSTNAME.SERVER.EQ(\"www.hotdrinks.com\") && http . req . url . path . startwith (\"/\")"-action team_hotdrink_cpx添加cs策略team_colddrink_cpx -rule "HTTP.REQ.HOSTNAME.SERVER.EQ(\"www.colddrinks.com\") && HTTP.REQ.URL.PATH.STARTSWITH(\"/\")"-action team_colddrink_cpx添加cs策略team_redis_cpx -rule "HTTP.REQ.HOSTNAME.SERVER.EQ(\"www.guestbook.com\") && HTTP.REQ.URL.PATH.STARTSWITH(\"/\")"-action team_redis_cpx bind lb vserver team_hotdrink_cpx team_hotdrink_cpx bind lb vserver team_redis_cpx team_colddrink_cpx bind lb vserver team_redis_cpx team_redis_cpx bind cs vserver front -policyName team_hotdrink_cpx -priority 10 bind cs vserver front -policyName team_colddrink_cpx -priority 20 bind cs vserver front -policyName team_redis_cpx -priority 30 bind serviceGroup team_hotdrink_cpx 10.1.3.8 443 bind serviceGroup team_colddrink_cpx 10.1.2.52 443 bind serviceGroupteam_redis_cpx 10.1.2.53 80 bind ssl vserver front -certkeyName cert 

将servicegroup的IP地址更新为CPX pod IP:

root@ubuntu-211:~/demo-nimata/final/final-v1# kubectl get pods -n cpx -o wide NAME READY STATUS重启AGE IP NODE cpx-ingress-colddrinks-5bd94bff8b-7prdl 1/1 Running 0 2h 10.1.3.8 ubuntu-221 cpx-ingress-hotdrinks-7c99b59f88-5kclv 1/1 Running 0 2h 10.1.2.52 ubuntu-213 cpx-ingress-redis-7bd6789d7f-szbv7 1/1 Running 0 2h 10.1.2.53 ubuntu-213 

image-cpx-deployment-08

  • 访问www.hotdrinks.com, www.colddrinks.com, www.guestbook.com, hosts文件(要访问页面的机器的hosts文件)应该附加以下值:

     www.hotdrinks.com  www.colddrinks.com  www.guestbook.com

    完成此操作后,可以通过以下方式访问应用程序:www.hotdrinks.com, www.colddrinks.com, www.guestbook.com

验证Tier-2 CPX配置

要验证CPX配置,请转到CPX环境。选择正在运行的CPX应用程序。

选择cpx-ingress-hotdrinks部署,然后单击cpx-ingress-hotdrinks-xxxx-xxxx豆荚。

在下一页中,转到正在运行的容器并启动用于的终端cpx-ingress-hotdrinks输入“bash”命令。

image-cpx-deployment-09

image-cpx-deployment-10

当终端连接时,使用常规NetScaler命令via验证配置cli_script.sh

  • Cli_script.sh " sh cs vs "
  • Cli_script.sh“sh lb vs”
  • Cli_script.sh " sh servicegroup "

可以为其他CPX部署进行验证team-colddrink而且team-mongodb同样的方式。

执行放大/缩小

按比例放大/缩小:

  1. team-hotdrink环境。选择team-hotdrink正在运行的应用程序。
  2. 单击frontend-hotdrinks部署。
  3. 在下一页,单击更新副本.增加到10。

参考:验证Tier-2 CPX配置,检查CPX中的配置(部署:CPX -ingress-hotdrinks)。

  1. 进入CPX环境。选择正在运行的CPX应用程序。
  2. 单击cpx-ingress-hotdrinks部署。
  3. 单击cpx-ingress-hotdrinks-xxxx-xxxx豆荚。
  4. 在下一页中,转到正在运行的容器并启动用于的终端cpx-ingress-hotdrinks输入“bash”命令。
  5. Cli_script.sh "sh servicegroup < servicegroup名称>"

image-cpx-deployment-11

执行滚动更新

执行滚动更新:

  1. team-hotdrink环境。选择team-hotdrink正在运行的应用程序。
  2. 准备好热饮。
  3. 在下一页上,转到圆荚体模板。
  4. 更新图像为:码头。io / citrix / hotdrinks-v2:最新
  5. 让更新完成。
  6. 再次访问应用程序。在滚动更新后,新页面应该带有更新后的图像。

image-cpx-deployment-12

部署普罗米修斯

NetScaler Metrics exports、Prometheus和Grafana被用于自动检测和收集来自入口CPX的度量。

部署Prometheus的步骤:

创建运行CPX和应用程序的环境:

  1. 环境选项卡。
  2. 点击添加环境
  3. 创建运行export, Prometheus和Grafana的环境。
    • 创造环境:监控

上传.yaml使用Nirmata文件:

  1. 目录选项卡。
  2. 点击添加应用程序
  3. 点击添加添加应用程序。
    • 添加应用程序:monitoring (monitoring.yaml)。

运行Prometheus应用程序:

  1. 环境选项卡,选择正确的环境:监控
  2. 点击运行应用程序使用名称监控
  3. 这将部署export、Prometheus和Grafana吊舱,并开始收集指标。
  4. 现在普罗米修斯和格拉夫娜需要通过VPX曝光。

VPX上揭露普罗米修斯和格拉芙娜的命令:

创建一个csvserver:

add cs vserver frontent_grafana HTTP  80 -cltTimeout 180 

普罗米修斯:暴露

add serviceGroup prometheus HTTP添加lb vserver prometheus HTTP 0.0.0.0 0添加cs动作prometheus -targetLBVserver prometheus添加cs策略prometheus -rule "HTTP. req . hostname . server . eq (\"www.prometheus.com\") && HTTP. req . url . path . startswith (\"/\")"-action prometheus bind lb vserver prometheus prometheus bind cs vserver frontent_grafana -policyName prometheus -priority 20 bind serviceGroup prometheus  9090 

注意:

使用“kubectl Get pods -n monitoring -o wide”获取prometheus-k8s-0 pod IP

暴露Grafana:

add serviceGroup grafana HTTP添加lb vserver grafana HTTP 0.0.0.0 0添加cs动作grafana -targetLBVserver grafana添加cs策略grafana -rule "HTTP. req . hostname . server . eq (\"www.grafana.com\") && HTTP. req . url . path . startswith (\"/\")"-action grafana bind lb vserver grafana bind cs vserver frontent_grafana -policyName grafana -priority 10 bind serviceGroup grafana  3000 

注意:

获取grafana-xxxx-xxx pod IP使用Kubectl让吊舱-n监视-o宽

  • 现在Prometheus和Grafana页面已经被暴露出来,可以通过VPX的cs vserver访问。

  • 要访问Prometheus和Grafana, hosts文件(要访问页面的机器)应该附加以下值:

     www.grafana.com  www.prometheus.com
  • 完成后,通过访问访问普罗米修斯www.prometheus.com.访问Grafanawww.grafana.com

可视化指标:

  • 要确保普罗米修斯已经发现了出口者,请访问www.prometheus.com/targets.它应该包含监视CPX和VPX设备的所有出口商的列表。确保所有出口商都在向上状态。示例如下:

image-cpx-deployment-13

  • 现在您可以使用Grafana绘制正在收集的值。做那件事:

    1. www.grafana.com.确保在主机文件中添加了适当的条目。
    2. 使用默认用户名登录管理和密码管理
    3. 登录后,单击添加数据源在主仪表板中。
    4. 选择普罗米修斯选择。
    5. 提供/更改以下细节:
      • 名字:普罗米修斯(全小写)。
      • URL:http://prometheus:9090
      • 其余条目保持默认值。
    6. 点击保存和测试.等待几秒钟,直到数据源正在工作消息显示在屏幕底部。
    7. 导入预先设计的Grafana模板+图标在左手面板上。选择进口
    8. 单击上传json按钮,并选择sample_grafana_dashboard.json文件(离开的名字文件夹,唯一标识符不变)。
    9. 选择普罗米修斯从普罗米修斯下拉菜单,并单击进口
    10. 这将上传一个类似于下图的仪表板:

      image-cpx-deployment-14

许可和性能测试

为性能和许可运行CPXs。

CPX内核数和许可证服务器详细信息在以下环境变量中给出。

环境变量来选择核数

  • 名称:“CPX_CORES”
  • 价值:“3”

环境变量来选择许可证服务器

  • 名称:“LS_IP”
  • 价值:“X.X.X.X”

    Diamanti注释:diamanti.com/endpoint0:{“网络”:“实验室网络”、“perfTier”:“高”}

    通过在上面设置正确的IP指向正确的许可证服务器。

    1. 中添加上述环境变量以及特定于Diamanti的注释cpx-perf.yaml文件。
    2. 环境选项卡,并创建cpx-perf环境。

    使用Nirmata上传YAML应用程序。

    1. 目录选项卡。
    2. 点击添加应用程序
    3. 点击添加添加应用。cpx-perf.yaml.应用程序名称:cpx-perf

    CPX:

    1. 环境选项卡,并选择cpx-perf环境。
    2. cpx-perf环境,运行cpx-svcacct应用程序。
    3. cpx-perf环境,运行cpx-perf应用程序。
    4. 运行应用程序后,转到cpx-perf应用程序。
    5. 部署> StatefulSets & DaemonSets选项卡上,单击cpx-ingress-perf部署。在下一页中,编辑Pod模板。输入CPX服务帐户
    6. 在Citrix ADM中验证许可证正在工作并且正在进行许可证签出。
      • 要在CPX上进行验证,请执行以下步骤:
        • Kubectl get pods -n CPX
        • 库贝特尔执行它 -n CPX bash
        • Cli_script.sh ' sh licenseserver '
        • Cli_script.sh ' sh capacity '
      • 查看类似的输出:
      root@cpx-ingress-colddrinks-66f4d75f76-kzf8w:/# cli_script.sh 'sh licenseserver' exec: sh licenseserver 1) ServerName: 10.217.212.228Port: 27000 Status: 1 Grace: 0 gptimleft: 0 Done root@cpx-ingress-colddrinks-66f4d75f76-kzf8w:/# cli_script.sh 'sh capacity' exec: sh capacity Actualbandwidth: 10000 VcpuCount: 3 Edition: Platinum Unit: Mbps Maxbandwidth: 10000 Minbandwidth: 20 Instancecount: 0 Done 
      • 要在ADM上进行验证,请转到许可服务器并导航到> license >虚拟CPU license
      • 在这里,您应该看到授权的CPX和核心计数。

      image-cpx-deployment-15

注释的表

注释 可能值 描述 默认值(如果有)
kubernetes.io / ingress.class 入口类名 这是一种将特定的入口资源与入口控制器相关联的方法。例如,kubernetes.io / ingress.class:“Citrix” 配置所有入口
ingress.citrix.com/secure_backend 使用.json格式列出安全后端的服务 使用真正的,如果您希望Citrix ADC使用安全HTTPS连接连接您的应用程序。使用,如果您希望Citrix ADC使用不安全的HTTP连接连接您的应用程序。例如,ingress.citrix.com/secure_backend: {' app1 ':"True", ' app2 ':"False", ' app3 ':"True"} “假”
ingress.citrix.com/lbvserver JSON形式的lbvserver的设置 它提供了智能注释功能。高级用户(具有NetScaler LB Vserver和服务组选项的知识)可以直接应用它们。值必须为.json格式。对于入口中的每个后端应用程序,提供一个键值对。密钥名称应与相应的CLI名称匹配。例如,ingress.citrix.com/lbvserver:{"应用程序1 ":{“lbmethod”:此“循环”}}” 默认值
Citrix ADC CPX在Kubernetes与Diamanti和Nirmata验证参考设计