Citrix ADC CPX在Kubernetes与Diamanti和Nirmata验证参考设计
要测试的特性和功能
测试用例:CPX作为入口控制器,南北和发夹东西向装置:
所有测试用例的设置(VPX除外):
- 集群中的两个cpx (CPX-1, CPX-2)
- ADM作为授权服务器
- 普罗米修斯出口容器在一个集群
- Prometheus服务器和Grafana(作为Kubernetes的pod或Kubernetes服务器的外部)
- 多个前端应用程序
- 几个后端应用程序
一、VPX为南北
SDX前端Diamanti平台上的VPX
- 测试SSL卸载,并为每个SSL连接插入X-Forward重新加密
- 在SSL会话上插入X-Forward
2CPX为南北设备
CPX-1。使用指定的入口类设置支持两个或三个HTTPS应用程序的HTTPS入口:
- 演示创建多个内容切换策略:每个前端应用程序一个。
- 每个CPX演示多个通配符证书:每个应用程序一个通配符证书。
- 演示CPX卸载和重新加密前端应用程序的流量。
- 演示不同的负载均衡算法。
- 向一个吊舱演示持久性。
CPX-1。使用指定的入口类设置单独的TCP入口:
- 插入TCP应用程序,如MongoDB。
- 显示TCP VIP的创建。
- 显示TCP客户端流量击中MongoDB pod。
- 显示默认TCP应用程序运行状况检查。
CPX-1。使用指定的入口类建立单独的TCP-SSL入口:
- 演示TCP-SSL VIP的SSL卸载和重新加密。
- 重复测试案例2。
每个应用的CPX。使用单独的入口类:
- 使用只支持一个应用程序的CPX-2重复测试用例1-3。
每队CPX。入口类的使用:
- 为2个团队分配不同的入口职业。
- 演示测试用例1作为CPX可以为单个团队配置入口规则的证据。
自动缩放前端吊舱:
- 增加前端吊舱的流量,并确保吊舱自动缩放。
- 显示CPX-1向服务组添加了新的pod。
- 演示HTTPS入口VIP。
4-7 vCPU支持:
- 配置CPX-1为4或7个vcpu。
- 展示HTTPS TPS的性能测试,全程加密BW。
3CPX作为发夹东西装置
CPX-1。为南北通信创建HTTPS入口,如第I.1节所述:
- 将后端应用程序暴露给前端应用程序。
- 显示两个应用程序之间的流量。
- 将后端应用程序公开给另一个后端应用程序。
- 显示应用程序之间的流量。
CPX-1。按照步骤1的说明操作。同时,显示端到端加密:
- 后端应用程序到后端应用程序,使用CPX-1进行卸载和重新加密。
自动缩放后端pod:
- 演示CPX-1将后端自动伸缩后端pod添加到服务组。
四、CPX与普罗米修斯、Grafana的整合
将Prometheus容器插入到Kubernetes集群中:
- 为每个应用程序配置导出的推荐计数器容器。
- 演示导出容器向Prometheus服务器发送计数器数据。
- 显示Grafana仪表板,说明来自Prometheus服务器的数据来自CPXs。
- 我们的目标是展示开发人员可以使用在DevOps中广泛使用的云原生工具。
演示集成Kubernetes滚动部署:
- 在Nirmata中插入新版本的应用程序。
- 显示Kubernetes将新应用版本部署到集群中。
- 演示CPX响应来自Kubernetes的滚动部署命令,将100%的流量从旧版本的应用程序转移到新版本的应用程序。
Citrix ADC CPX部署方案
自定义协议:默认情况下,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
[支持自定义端口的注释]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}}”
每个应用SSL加密:CITRIX INGRESS CONTROLLER可以在智能注释的帮助下选择性地为应用程序启用SSL加密。
注释:
ingress.citrix.com/secure_backend: '{"web-backend": "True"}
[选择性地为每个应用程序启用加密的注释]缺省证书:CITRIX INGRESS CONTROLLER可以采用默认的cert作为参数。如果入口定义没有秘密,则采用默认证书。秘密需要在名称空间中创建一次,然后该名称空间中的所有入节点都可以使用它。
Citrix多入口类支持:默认情况下,CITRIX INGRESS CONTROLLER监听k8s集群中的所有入口对象。我们可以通过入口类注释来控制ADC (Tier-1 MPX/VPX & Tier-2 CPX)的配置。这有助于每个团队独立地管理ADC的配置。入口类可以帮助部署解决方案,为特定的名称空间和一组名称空间配置ADC。与其他供应商提供的支持相比,该支持更加通用。
注释:
kubernetes.io / ingress.class:“citrix”
[通知CITRIX INGRESS CONTROLLER只配置属于特定类的INGRESS]可见性: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-hotdrink
:SSL/HTTP入口,持久化,lbmethod,每个应用程序加密/描述,default-cert。
team-colddrink
:SSL-TCP入口
team-redis
:TCP入口
POC的设置
应用程序流
HTTP / SSL / SSL-TCP用例:
TCP的用例:
获取docker图像
提供的YAML命令从码头存储库获取映像。
映像也可以提取并存储在本地存储库中。控件可以使用它们图像YAML中的参数。
使用Nirmata逐步应用程序和CPX部署
在YAML中上传集群角色和集群角色绑定,并使用Nirmata (rbac.yaml)在集群中应用它们。
- 去集群选项卡。
- 选择集群。
- 在设置中,应用YAML使用yaml选择。
创建运行CPX和应用程序的环境。
- 去环境选项卡。
- 点击添加环境选项卡。
- 选择集群并在共享名称空间中创建环境。
- 为不同的团队创建以下运行Prometheus、CPX和应用程序的环境。
- 创建环境:cpx
- 创造环境:团队热饮
- 创造环境:团队冷饮
- 创建环境:team-redis
上传
.yaml
应用程序使用Nirmata。- 去目录选项卡。
- 点击添加应用程序.
点击添加添加应用程序。
添加应用程序: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。
使用Nirmata运行CPX。
- 去环境选项卡,选择正确的环境。
- 点击运行应用程序运行应用程序。
- 在cpx环境中,运行
cpx-svcacct
应用程序。选择cpx-svcacct
运行名cpx-svcacct
从应用程序目录. - 在cpx环境中,运行cpx应用程序。中选择cpx应用程序目录.
注意:
CPX部署需要一些小的变通方法,因为设置使用的是早期版本的Nirmata。
- 创建CPX部署时,不要设置
serviceAccountName
.的serviceAccountName
可以稍后添加。作为解决方案,自动重新部署pod。 - 直接在环境中为入口导入TLS秘密。这确保了类型字段被保留。
- 运行应用程序后,转到CPX应用程序。
- 下部署> StatefulSets & DaemonSets选项卡,单击
cpx-ingress-colddrinks
部署。 - 在下一页上,编辑豆荚模板.输入CPX在服务帐户.
- 回到CPX应用程序。
- 重复相同的过程
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
.使用Nirmata运行应用程序。
team-hotdrink应用程序:
- 去环境选项卡,选择正确的环境:
team-hotdrink
. - 在
team-hotdrink
环境,运行team-hotddrink
使用team-hotdrink
运行的名字。选择team-hotdrink
从应用程序目录. - 去
team-hotdrink
应用程序。2 .单击界面右上角的设置并选择导入到应用程序.上传hotdrink-secret.yaml
.
team-colddrink应用程序:
- 去环境选项卡,选择正确的环境:
team-colddrink
. - 在
team-colddrink
环境,运行team-coldddrink
应用程序与team-colddrink
运行的名字。选择team-hotdrink
从应用程序目录. - 去
team-colddrink
应用程序。2 .单击界面右上角的设置并选择导入到应用程序.上传colddrink-secret.yaml
.
team-redis应用程序:
- 去环境选项卡,选择正确的环境:
team-redis
. - 在
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:
上传certkey
Citrix 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
访问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”命令。
当终端连接时,使用常规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
同样的方式。
执行放大/缩小
按比例放大/缩小:
- 去
team-hotdrink
环境。选择team-hotdrink
正在运行的应用程序。 - 单击
frontend-hotdrinks
部署。 - 在下一页,单击更新副本.增加到10。
参考:验证Tier-2 CPX配置,检查CPX中的配置(部署:CPX -ingress-hotdrinks)。
- 进入CPX环境。选择正在运行的CPX应用程序。
- 单击
cpx-ingress-hotdrinks
部署。 - 单击
cpx-ingress-hotdrinks-xxxx-xxxx
豆荚。 - 在下一页中,转到正在运行的容器并启动用于的终端
cpx-ingress-hotdrinks
输入“bash”命令。 Cli_script.sh "sh servicegroup < servicegroup名称>"
.
执行滚动更新
执行滚动更新:
- 去
team-hotdrink
环境。选择team-hotdrink
正在运行的应用程序。 - 准备好热饮。
- 在下一页上,转到圆荚体模板。
- 更新图像为:码头。io / citrix / hotdrinks-v2:最新.
- 让更新完成。
- 再次访问应用程序。在滚动更新后,新页面应该带有更新后的图像。
部署普罗米修斯
NetScaler Metrics exports、Prometheus和Grafana被用于自动检测和收集来自入口CPX的度量。
部署Prometheus的步骤:
创建运行CPX和应用程序的环境:
- 去环境选项卡。
- 点击添加环境.
- 创建运行export, Prometheus和Grafana的环境。
- 创造环境:监控.
上传.yaml
使用Nirmata文件:
- 去目录选项卡。
- 点击添加应用程序.
- 点击添加添加应用程序。
- 添加应用程序:monitoring (monitoring.yaml)。
运行Prometheus应用程序:
- 去环境选项卡,选择正确的环境:监控.
- 点击运行应用程序使用名称监控.
- 这将部署export、Prometheus和Grafana吊舱,并开始收集指标。
- 现在普罗米修斯和格拉夫娜需要通过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设备的所有出口商的列表。确保所有出口商都在向上状态。示例如下:
现在您可以使用Grafana绘制正在收集的值。做那件事:
- 去www.grafana.com.确保在主机文件中添加了适当的条目。
- 使用默认用户名登录管理和密码管理.
- 登录后,单击添加数据源在主仪表板中。
- 选择普罗米修斯选择。
- 提供/更改以下细节:
- 名字:普罗米修斯(全小写)。
- URL:
http://prometheus:9090
. - 其余条目保持默认值。
- 点击保存和测试.等待几秒钟,直到数据源正在工作消息显示在屏幕底部。
- 导入预先设计的Grafana模板
+
图标在左手面板上。选择进口. - 单击上传json按钮,并选择sample_grafana_dashboard.json文件(离开的名字,文件夹,唯一标识符不变)。
- 选择普罗米修斯从普罗米修斯下拉菜单,并单击进口.
这将上传一个类似于下图的仪表板:
许可和性能测试
为性能和许可运行CPXs。
CPX内核数和许可证服务器详细信息在以下环境变量中给出。
环境变量来选择核数
- 名称:“CPX_CORES”
- 价值:“3”
环境变量来选择许可证服务器
- 名称:“LS_IP”
价值:“X.X.X.X”
Diamanti注释:
diamanti.com/endpoint0:{“网络”:“实验室网络”、“perfTier”:“高”}
通过在上面设置正确的IP指向正确的许可证服务器。
- 中添加上述环境变量以及特定于Diamanti的注释
cpx-perf.yaml
文件。 - 去环境选项卡,并创建
cpx-perf
环境。
使用Nirmata上传YAML应用程序。
- 去目录选项卡。
- 点击添加应用程序.
- 点击添加添加应用。
cpx-perf.yaml
.应用程序名称:cpx-perf
.
CPX:
- 去环境选项卡,并选择
cpx-perf
环境。 - 在
cpx-perf
环境,运行cpx-svcacct
应用程序。 - 在
cpx-perf
环境,运行cpx-perf
应用程序。 - 运行应用程序后,转到
cpx-perf
应用程序。 - 下部署> StatefulSets & DaemonSets选项卡上,单击
cpx-ingress-perf
部署。在下一页中,编辑Pod模板。输入CPX在服务帐户. - 在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和核心计数。
- 要在CPX上进行验证,请执行以下步骤:
- 中添加上述环境变量以及特定于Diamanti的注释
注释的表
注释 | 可能值 | 描述 | 默认值(如果有) |
---|---|---|---|
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”:此“循环”}}” |
默认值 |