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

部署服务网格拓扑的先决条件可在设置服务图中找到。

在 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}"

以下是运行命令后的示例输出:

Example command

  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 验证配置。

    static routing

  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 Chart 中可配置的参数及其默认值:

    参数 描述 默认值 可选/强制 (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 地址 null NetScaler CPX 强制
    ADMSettings.ADMFingerPrint NetScaler ADM 指纹。导航到 Settings > Adminstration,然后单击 System Configurations 下的 View Fingerprint null 可选
    ingressGateway.EULA 最终用户许可协议 (EULA) 条款和条件。如果为“是”,则表示用户同意 EULA 条款和条件。 NO 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 Chart 中可配置的参数及其默认值:

    参数 描述 默认值
    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 条款和条件。 NO
    cpxProxy.cpxSidecarMode NetScaler CPX 的环境变量。它指示 NetScaler CPX 是否以 Sidecar 模式运行。 YES
  5. 在需要 CPX Sidecar 注入的任何命名空间上设置标签。

    kubectl label namespace <app-namespace> cpx-injection=enabled

    执行步骤 3 和 5 后,您可以看到 NetScaler CPX 已在 NetScaler ADM 中注册。

部署示例应用程序

假设您要部署以下应用程序:

Deploy sample apps

执行以下过程以部署示例应用程序:

  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 Server 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>
        <!--NeedCopy-->
        
      2. 运行 kubectl create -f <yaml file>

        服务帐户已创建。

      3. 运行 kubectl create clusterrolebinding <name> --clusterrole=cluster-admin --serviceaccount=<namespace>:<name> 以将集群角色绑定到服务帐户。

        服务帐户现在具有集群范围的访问权限。

        创建服务帐户时会自动生成令牌。

      4. 运行 kubectl describe sa <name> 以查看令牌。

      5. 要获取 Secret 字符串,请运行 kubectl describe secret <token-name>

        Generate token

    4. 从列表中选择代理。

      注意

      如果您使用的是 ADM 代理,请确保选择您在 CPX YAML 中添加的同一代理。

    5. 单击 Create

      add cluster

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

注意

确保您有足够的虚拟服务器许可证。有关更多信息,请参阅许可

在 NetScaler ADM 中添加 Kubernetes 集群后,您必须确保自动选择虚拟服务器以进行许可。虚拟服务器必须获得许可才能在服务图中显示数据。要自动选择虚拟服务器:

  1. 导航到 Settings > Licensing & Analytics Configuration

  2. Virtual Server License Summary 下,启用 Auto-select Virtual ServersAuto-select non addressable Virtual Servers

    Auto-select virtual server

启用 Web 事务和 TCP 事务设置

在添加 Kubernetes 集群并启用虚拟服务器自动选择后,将 Web Transaction SettingsTCP Transactions Settings 更改为 All

  1. 导航到 Settings > Analytics Settings

    此时将显示“分析设置”页面。

  2. 单击 Enable Features for Analytics

  3. Web Transaction Settings 下,选择 All

  4. TCP Transactions Settings 下,选择 All

    TCP

  5. 单击 OK

将流量发送到微服务

接下来,您必须将流量发送到微服务,以使服务图在 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 分钟内填充。

Sample

使用服务图,您可以分析各种服务详细信息,例如指标、错误等。有关更多信息,请参阅服务图