设置服务网格拓扑的详细步骤
部署服务网格拓扑的先决条件可在 设置服务图中找到。
在 NetScaler ADM 中配置静态路由
在 Kubernetes 群集中,所有容器化的容器舱都使用覆盖网络。无法直接使用这些专用 IP 地址建立通信。要启用从 NetScaler ADM 到 Kubernetes 群集的通信,您必须在 NetScaler ADM 中配置静态路由。
注意
如果您使用的是本地代理,请确保在代理上配置静态路由。使用 SSH 客户端,登录 NetScaler ADM 代理并配置静态路由。
请考虑您的 Kubernetes 群集具有以下 IP 地址:
-
Kubernetes master – 101.xx.xx.112
-
Kubernetes worker 1 – 101.xx.xx.111
-
Kubernetes worker 2 – 101.xx.xx.110
在 Kubernetes master 上,运行以下命令来标识要进行静态路由的 pod 网络:
kubectl get nodes -o jsonpath="{range .items[*]}{'podNetwork: '}{.spec.podCIDR}{'\t'}{'gateway: '}{.status.addresses[0].address}{'\n'}{end}"
以下是运行命令后的示例输出:
-
使用 SSH 客户端登录到 NetScaler ADM
-
使用命令配置静态路由
route add -net <public IP address range> <Kubernetes IP address>
例如:
route add -net 192.168.0.0/24 101.xx.xx.112
route add -net 192.168.1.0/24 101.xx.xx.111
route add -net 192.168.2.0/24 101.xx.xx.110
-
使用
netstat -rn
验证配置 -
将这些路由命令附加到
/mpsconfig/svm.conf
文件中。-
在 NetScaler ADM 中,使用以下命令访问 svm.conf 文件:
vim /mpsconfig/svm.conf
-
在 svm.conf 文件中添加静态路由。
例如,
route add -net 192.168.0.0/24 101.xx.xx.112
。
-
配置所需的参数
在 Kubernetes 大师中:
-
在部署 CPX 作为入口网关/sidecar 的每个命名空间中使用 ADM Agent 凭据创建密钥。
kubectl create secret generic admlogin --from-literal=username=<username> --from-literal=password=<password> -n <namespace>
-
helm repo add citrix https://citrix.github.io/citrix-helm-charts/
-
将 NetScaler CPX 部署为入口网关
helm install citrix-adc-istio-ingress-gateway citrix/citrix-adc-istio-ingress-gateway --version 1.2.1 --namespace <namespace> --set ingressGateway.EULA=YES,citrixCPX=true,ADMSettings.ADMFingerPrint=XX:00:X1:00:XX:0X:X0,ADMSettings.ADMIP=<xx.xx.xx.xx>, ingressGateway.image=quay.io/citrix/citrix-k8s-cpx-ingress,ingressGateway.tag=13.0-58.30
下表列出了 Helm 控制图中的可配置参数及其默认值:
参数 说明 默认 可选/强制 (Helm) citrixCPX NetScaler CPX FALSE NetScaler CPX 必须使用 xDSAdaptor.image Citrix xDS 适配器容器的示意图 quay.io/citrix/citrix-istio-adaptor: 1.2.1 强制 ADMSettings.ADMIP NetScaler ADM IP 地址 空值 NetScaler CPX 必须使用 ADMSettings.ADMFingerPrint NetScaler ADM 指纹。导航到“设置”>“管理”,然后单击“系统配置”下的“查看指纹” 空值 可选 ingressGateway.EULA 最终用户许可协议 (EULA) 条款和条件。如果是,则用户同意最终用户许可协议的条款和条件。 否 NetScaler CPX 必须使用 ingressGateway.image 被指定为入口网关运行的 NetScaler CPX 的映像 quay.io/citrix/citrix-k8s-cpx-ingress: 13.0—58.30 NetScaler CPX 必须使用 -
部署 Citrix SideCar 注射器。
helm install cpx-sidecar-injector citrix/citrix-cpx-istio-sidecar-injector --version 1.2.1 --namespace <namespace> set cpxProxy.EULA=YES,ADMSettings.ADMFingerPrint=xx:xx:xx:xx,ADMSettings.ADMIP=<xx.xx.xx.xx>,cpxProxy.image=quay.io/citrix/citrix-k8s-cpx-ingress,cpxProxy.tag=13.0-58.30
下表列出了 Helm 控制图中的可配置参数及其默认值:
参数 说明 默认值 ADMSettings.ADMIP NetScaler ADM IP 地址 NIL cpxProxy.image NetScaler CPX 映像用作侧车代理 quay.io/citrix/citrix-k8s-cpx-ingress: 13.0—58.30 cpxProxy.imagePullPolicy NetScaler 的图像拉取策略 IfNotPresent cpxProxy.EULA 最终用户许可协议 (EULA) 条款和条件。如果是,则用户同意最终用户许可协议的条款和条件。 否 cpxProxy.cpxSidecarMode NetScaler CPX 的环境变量。它表示 NetScaler CPX 是否作为侧车模式运行。 是 -
在任何需要 CPX Sidecar 注入的命名空间上设置标签。
kubectl label namespace <app-namespace> cpx-injection=enabled
执行步骤 3 和 5 后,您可以看到 NetScaler CPX 已在 NetScaler ADM 中注册。
部署示例应用程序
考虑您想部署以下应用程序:
请执行以下步骤来部署示例应用程序:
-
kubectl create namespace citrix-system
-
kubectl create namespace bookinfo
-
kubectl label namespace bookinfo cpx-injection=enabled
-
kubectl create secret generic admlogin --from-literal=username=<uername> --from-literal=password=<password> -n citrix-system
注意
您可以提供自己选择的用户名和密码。
-
kubectl create secret generic admlogin --from-literal=username=<username> --from-literal=password=<password> -n bookinfo
注意
您可以提供自己选择的用户名和密码。
-
helm install citrix-adc-istio-ingress-gateway citrix/citrix-adc-istio-ingress-gateway --version 1.2.1 --namespace citrix-system --set ingressGateway.EULA=YES,citrixCPX=true,ADMSettings.ADMFingerPrint=xx:xx:xx:xx,ADMSettings.ADMIP=<ADM agent IP address>,ingressGateway.image=quay.io/citrix/citrix-k8s-cpx-ingress,ingressGateway.tag=13.0-58.30
注意
您必须提供您的 ADM 指纹和 ADM 代理或 ADM IP 地址
-
helm install cpx-sidecar-injector citrix/citrix-cpx-istio-sidecar-injector --namespace citrix-system --set cpxProxy.EULA=YES,ADMSettings.ADMFingerPrint=xx:xx:xx:xx,ADMSettings.ADMIP=<ADM agent IP address>,cpxProxy.image=quay.io/citrix/citrix-k8s-cpx-ingress,cpxProxy.tag=13.0-58.30
注意
您必须提供您的 ADM 指纹和 ADM 代理或 ADM IP 地址
-
helm install bookinfo bookinfo/ --namespace bookinfo --set citrixIngressGateway.namespace=citrix-system
在 NetScaler ADM 中添加 Kubernetes 群集
要添加库伯内特斯群集,请执行以下操作:
-
使用管理员凭据登录到 NetScaler ADM。
-
导航到调配 > Kubernetes > 群集。 屏幕上将显示“群集”页面。
-
单击添加。
-
在“添加群集”页中,指定以下参数:
-
名称 -指定您选择的名称。
-
API 服务器 URL -您可以从 Kubernetes 主节点获取 API 服务器 URL 的详细信息。
-
在 Kubernetes 主节点上,运行命令
kubectl cluster-info
。 -
输入为 Kubernetes 主服务器的运行地址显示的 URL。
-
-
身份验证令牌 -指定身份验证令牌。需要身份验证令牌才能验证 Kubernetes 群集与 NetScaler ADM 之间通信的访问权限。要生成身份验证令牌,请执行以下操作:
在库贝内特斯主节点上:
-
使用以下 YAML 创建服务帐户:
apiVersion: v1 kind: ServiceAccount metadata: name: <name> namespace: <namespace> <!--NeedCopy-->
-
运行
kubectl create -f <yaml file>
。服务帐户即被创建。
-
运行
kubectl create clusterrolebinding <name> --clusterrole=cluster-admin --serviceaccount=<namespace>:<name>
以将群集角色绑定到服务帐户。服务帐户现在拥有群集范围的访问权限。
令牌是在创建服务帐户时自动生成的。
-
运行
kubectl describe sa <name>
以查看令牌。 -
要获取密钥字符串,请运行
kubectl describe secret <token-name>
。
-
-
从列表中选择座席。
注意
如果您使用的是 ADM 代理,请确保选择与在 CPX YAML 中添加的相同代理。
-
单击创建。
-
为许可启用自动选择虚拟服务器
注意
确保您有足够的虚拟服务器许可证。有关详细信息,请参阅许可。
在 NetScaler ADM 中添加 Kubernetes 群集后,必须确保自动选择虚拟服务器进行许可。虚拟服务器必须获得许可才能在服务图中显示数据。要自动选择虚拟服务器,请执行以下操作:
-
导航到 Settings(设置)> Licensing & Analytics Configuration(许可和分析配置)。
-
在“虚拟服务器许可证摘要”下,启用 自动选择虚拟服务器 并 自动选择不可寻址的虚拟服务器。
启用 Web 事务和 TCP 事务设置
添加 Kubernetes 群集并启用自动选择虚拟服务器后,将 Web 事务设置和 TCP 事务设置更改为全部。
-
导航到“设置”>“分析设置”。
此时将显示“分析设置”页面。
-
单击启用分析功能。
-
在 Web 事务设置下,选择 全部。
-
在 TCP 事务设置下,选择 全部。
-
单击确定。
向微服务发送流量
接下来,您必须向微服务发送流量,以便在 NetScaler ADM 中填充服务图表。
-
确定入口 IP 和端口
export INGRESS_HOST=$(kubectl get pods -l app=citrix-ingressgateway -n citrix-system -o 'jsonpath={.items[0].status.hostIP}')
export INGRESS_PORT=$(kubectl -n citrix-system get service citrix-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export SECURE_INGRESS_PORT=$(kubectl -n citrix-system get service citrix-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
-
使用 cURL 访问 Bookinfo 前端应用程序。
productpage
服务必须返回 200 OK 响应。curl -kv https://$INGRESS_HOST:$SECURE_INGRESS_PORT/productpage
curl -v http://$INGRESS_HOST:$INGRESS_PORT/productpage
-
从浏览器访问
https://$INGRESS_HOST:$SECURE_INGRESS_PORT/productpage
。此时将显示 Bookinfo 页面。
-
确保 $INGRESS_HOST 和 $SECURE_INGRESS_PORT 被 IP 地址和端口值替换。
向微服务发送流量后,服务图将在大约 10 分钟内填充。
使用服务图表,您可以分析各种服务详细信息,例如指标、错误等。有关详细信息,请参阅 服务图。