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

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

在 NetScaler Console 中配置静态路由

在 Kubernetes 集群内部,所有容器化 pod 都使用覆盖网络。无法直接使用这些私有 IP 地址建立通信。要启用 NetScaler Console 与 Kubernetes 集群之间的通信,您必须在 NetScaler Console 中配置静态路由。

注意

如果您使用的是本地代理,请确保在代理上配置静态路由。使用 SSH 客户端登录到 NetScaler 代理并配置静态路由。

假设您的 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}"

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

示例命令

  1. 使用 SSH 客户端登录到 NetScaler Console。

  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 Console 中,使用以下命令访问 svm.conf 文件:

      vim /mpsconfig/svm.conf

    2. svm.conf 文件中添加静态路由。

      例如,route add -net 192.168.0.0/24 101.xx.xx.112

配置所需参数

在 Kubernetes master 中:

  1. 在部署了 CPX 作为入口网关/Sidecar 的每个命名空间中,使用代理凭据创建 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 Console IP 地址 null NetScaler CPX 必需
    ADMSettings.ADMFingerPrint NetScaler Console 指纹。导航到 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 Console 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 Console 中看到 NetScaler CPX 已注册。

部署示例应用程序

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

部署示例应用程序

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

  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=<agent IP address>,ingressGateway.image=quay.io/citrix/citrix-k8s-cpx-ingress,ingressGateway.tag=13.0-58.30

    注意

    您必须提供您的 Console 指纹以及代理或 Console 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

    注意

    您必须提供您的 Console 指纹以及代理或 Console IP 地址。

  8. helm install bookinfo bookinfo/ --namespace bookinfo --set citrixIngressGateway.namespace=citrix-system

在 NetScaler Console 中添加 Kubernetes 集群

要添加 Kubernetes 集群:

  1. 使用管理员凭据登录到 NetScaler Console。

  2. 导航到 Orchestration > Kubernetes > Cluster。 此时将显示“集群”页面。

  3. 单击 Add

  4. Add Cluster 页面中,指定以下参数:

    1. Name - 指定您选择的名称。

    2. API Server URL - 您可以从 Kubernetes Master 节点获取 API 服务器 URL 详细信息。

      1. 在 Kubernetes master 节点上,运行命令 kubectl cluster-info

        API 服务器 URL

      2. 输入为 “Kubernetes master is running at.” 显示的 URL。

    3. Authentication Token - 指定身份验证令牌。身份验证令牌是验证 Kubernetes 集群与 NetScaler Console 之间通信访问所需的。要生成身份验证令牌:

      在 Kubernetes master 节点上:

      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>

        生成令牌

    4. 从列表中选择代理。

      注意

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

    5. 单击 Create

      添加集群

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

注意

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

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

  1. 导航到 Settings > Licensing & Analytics Configuration

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

    自动选择虚拟服务器

启用 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 Console 中填充。

  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 分钟内填充。

示例

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