设置服务网格拓扑的详细步骤

Last published : Oct 06, 2026
部署服务网格拓扑的先决条件可在设置服务图中找到。

在 NetScaler® ADM 中配置静态路由

在 Kubernetes 集群内部,所有容器化 Pod 都使用覆盖网络。无法直接使用这些私有 IP 地址建立通信。要启用从 NetScaler ADM 到 Kubernetes 集群的通信,您必须在 NetScaler ADM 中配置静态路由。
注意
如果您使用的是本地代理,请确保在代理上配置静态路由。使用 SSH 客户端登录到 NetScaler 代理并配置静态路由。
假设您的 Kubernetes 集群具有以下 IP 地址:
  • Kubernetes 主节点 – 101.xx.xx.112
  • Kubernetes 工作节点 1 – 101.xx.xx.111
  • Kubernetes 工作节点 2 – 101.xx.xx.110
在 Kubernetes 主节点上,运行以下命令以识别用于静态路由的 Pod 网络:
kubectl get nodes -o jsonpath="{range .items[*]}{'podNetwork: '}{.spec.podCIDR}{'\t'}{'gateway: '}{.status.addresses[0].address}{'\n'}{end}"
运行命令后,以下是示例输出:
示例命令
  1. 使用 SSH 客户端登录到 NetScaler ADM
  2. 使用命令 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
  3. 使用 netstat -rn 验证配置
    静态路由
  4. 将这些路由命令附加到 /mpsconfig/svm.conf 文件中。
    1. 在 NetScaler ADM 中,使用以下命令访问 svm.conf 文件:
      vim /mpsconfig/svm.conf
    2. 在 svm.conf 文件中添加静态路由。
      例如,route add -net 192.168.0.0/24 101.xx.xx.112。

配置所需参数

在 Kubernetes 主节点中:
  1. 在部署了 CPX 作为入口网关/Sidecar 的每个命名空间中,使用 ADM 代理凭据创建 Secret。
    kubectl create secret generic admlogin --from-literal=username=<username> --from-literal=password=<password> -n <namespace>
  2. helm repo add citrix https://citrix.github.io/citrix-helm-charts/
  3. 将 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 图表中的可配置参数及其默认值:
    参数 描述 默认值 可选/必选(赫尔姆)
    citrixCPX NetScaler CPX 否 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) 条款和条件。如果选择是,则表示用户同意 EULA 条款和条件。 否 NetScaler CPX 必填项
    ingressGateway.image 用作入口网关的 NetScaler CPX 映像 quay.io/citrix/citrix-k8s-cpx-ingress:13.0–58.30 NetScaler CPX 必需
  4. 部署 Citrix SideCar Injector 组件。
    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 用作 Sidecar 代理的 NetScaler CPX 映像 quay.io/citrix/citrix-k8s-cpx-ingress:13.0–58.30
    cpxProxy.imagePullPolicy NetScaler 的镜像拉取策略 IfNotPresent
    cpxProxy.EULA 最终用户许可协议 (EULA) 条款和条件。如果选择“是”,则表示用户同意 EULA 条款和条件。 否
    cpxProxy.cpxSidecarMode NetScaler CPX 的环境变量。它指示 NetScaler CPX 是否以 Sidecar 模式运行。 是
  5. 在需要 CPX Sidecar 注入的任何命名空间上设置标签。
    kubectl label namespace <app-namespace> cpx-injection=enabled
    执行步骤 3 和 5 后,您可以看到 NetScaler CPX 已在 NetScaler ADM 中注册。

部署示例应用程序

假设您要部署以下应用程序:
部署示例应用程序
执行以下步骤来部署示例应用程序:
  1. kubectl create namespace citrix-system
  2. kubectl create namespace bookinfo
  3. kubectl label namespace bookinfo cpx-injection=enabled
  4. kubectl create secret generic admlogin --from-literal=username=<uername> --from-literal=password=<password> -n citrix-system
    注意
    您可以选择提供用户名和密码。
  5. kubectl create secret generic admlogin --from-literal=username=<username> --from-literal=password=<password> -n bookinfo
    注意
    您可以选择提供用户名和密码。
  6. 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 地址
  7. 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 地址
  8. helm install bookinfo bookinfo/ --namespace bookinfo --set citrixIngressGateway.namespace=citrix-system

在 NetScaler ADM 中添加 Kubernetes 集群

要添加 Kubernetes 集群:
  1. 使用管理员凭据登录到 NetScaler ADM。
  2. 导航到 Orchestration > Kubernetes > Cluster。 将显示“集群”页面。
  3. 单击 Add。
  4. 在 Add Cluster 页面中,指定以下参数:
    1. Name - 指定您选择的名称。
    2. API Server URL - 您可以从 Kubernetes 主节点获取 API 服务器 URL 详细信息。
      1. 在 Kubernetes 主节点上,运行命令 kubectl cluster-info。
        API 服务器 URL
      2. 输入为 “Kubernetes master is running at.” 显示的 URL。
    3. Authentication Token - 指定身份验证令牌。身份验证令牌是验证 Kubernetes 集群和 NetScaler ADM 之间通信访问所必需的。要生成身份验证令牌:
      在 Kubernetes 主节点上:
      1. 使用以下 YAML 创建服务帐户:
        apiVersion: v1
        kind: ServiceAccount
        metadata:
          name: <name>
          namespace: <namespace>
      2. 运行 kubectl create -f <yaml file>。
        服务帐户已创建。
      3. 运行 kubectl create clusterrolebinding <name> --clusterrole=cluster-admin --serviceaccount=<namespace>:<name> 将集群角色绑定到服务帐户。
        服务帐户现在具有集群范围的访问权限。
        创建服务帐户时会自动生成一个令牌。
      4. 运行 kubectl describe sa <name> 查看令牌。
      5. 要获取密钥字符串,请运行 kubectl describe secret <token-name>。
        生成令牌
    4. 从列表中选择代理。
      注意
      如果您正在使用 ADM 代理,请确保选择您在 CPX YAML 中添加的同一代理。
    5. 单击 创建。
      添加集群

启用自动选择虚拟服务器进行许可

注意
确保您有足够的虚拟服务器许可证。有关更多信息,请参阅许可
在 NetScaler ADM 中添加 Kubernetes 集群后,您必须确保自动选择虚拟服务器进行许可。虚拟服务器必须获得许可才能在服务图中显示数据。要自动选择虚拟服务器,请执行以下操作:
  1. 导航到 设置 > 许可与分析配置。
  2. 在 虚拟服务器许可证摘要 下,启用 自动选择虚拟服务器 和 自动选择不可寻址虚拟服务器。
    自动选择虚拟服务器

启用 Web 事务和 TCP 事务设置

添加 Kubernetes 集群并启用自动选择虚拟服务器后,将 Web 事务设置 和 TCP 事务设置 更改为 全部。
  1. 导航到 设置 > 分析设置。
    将显示 分析设置 页面。
  2. 单击 启用分析功能。
  3. 在 Web 事务设置 下,选择 全部。
  4. 在 TCP 事务设置 下,选择 全部。
    TCP
  5. 单击 确定。

将流量发送到微服务

接下来,您必须将流量发送到微服务,以便在 NetScaler ADM 中填充服务图。
  1. 确定入口 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}')
  2. 使用 cURL 访问 Bookinfo 前端应用程序。productpage 服务必须返回 200 OK 响应。
    curl -kv https://$INGRESS_HOST:$SECURE_INGRESS_PORT/productpage
    curl -v http://$INGRESS_HOST:$INGRESS_PORT/productpage
  3. 从浏览器访问 https://$INGRESS_HOST:$SECURE_INGRESS_PORT/productpage。
    显示 Bookinfo 页面。
  4. 确保 $INGRESS_HOST 和 $SECURE_INGRESS_PORT 被 IP 地址和端口值替换。
将流量发送到微服务后,服务图将在大约 10 分钟内填充。
示例
使用服务图,您可以分析各种服务详细信息,例如指标、错误等。有关更多信息,请参阅 服务图。