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

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

配置 NetScaler 代理

要启用 Kubernetes 群集和 NetScaler 控制台之间的通信,必须安装和配置代理。您可以使用 NetScaler 实例上提供的虚拟机管理程序、公共云服务(例如 Microsoft Azure、AWS)或 NetScaler 实例上提供的内置代理(非常适合 HA 部署)配置代理。

按照 步骤 配置代理。

注意

  • 您也可以使用现有代理。

  • 默认情况下,这些代理会自动升级到 NetScaler 控制台的最新版本。您可以在 基础结构 > 实例 > 代理页面上查看代理 详细信息。您还可以指定希望代理升级的时间。有关更多信息,请参阅 配置代理升级设置

在代理中配置静态路由

在 Kubernetes 群集中,所有容器化的容器舱都使用覆盖网络。无法直接使用这些私有 IP 地址建立通信。要启用从 NetScaler 控制台到 Kubernetes 群集的通信,必须在代理中配置静态路由。

请考虑您的 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 客户端,登录到代理

  2. 键入 shell 并按 Enter 键切换到 bash

  3. 使用命令配置静态路由 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

  4. 使用 netstat -rn 验证配置

    静态路由

  5. 将这些路由命令附加到 /mpsconfig/svm.conf 文件中。

    1. 在代理中,使用以下命令访问 svm.conf 文件:

      vim /mpsconfig/svm.conf

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

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

配置所需的参数

在 Kubernetes 大师中:

  1. 在部署 CPX 作为入口网关/边车的每个命名空间中,使用代理凭据创建密钥。

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

    参数 说明 默认 可选/强制 (Helm)
    citrixCPX NetScaler CPX FALSE NetScaler CPX 必须使用
    xDSAdaptor.image Citrix xDS 适配器容器的示意图 quay.io/citrix/citrix-istio-adaptor: 1.2.1 强制
    ADMSettings.ADMIP NetScaler 控制台 IP 地址 空值 NetScaler CPX 必须使用
    ADMSettings.ADMFingerPrint NetScaler 控制台指纹。导航到 基础结构 > 实例 > 代理,选择代理,然后单击 查看指纹 空值 可选
    ingressGateway.EULA 最终用户许可协议 (EULA) 条款和条件。如果是,则用户同意最终用户许可协议的条款和条件。 NetScaler CPX 必须使用
    ingressGateway.image 被指定为入口网关运行的 NetScaler CPX 的映像 quay.io/citrix/citrix-k8s-cpx-ingress: 13.0—58.30 NetScaler CPX 必须使用
  4. 部署 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 控制台 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 是否作为侧车模式运行。
  5. 在任何需要 CPX Sidecar 注入的命名空间上设置标签。

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

    执行第 3 步和第 5 步后,您可以看到 NetScaler CPX 已在 NetScaler 控制台中注册。

部署示例应用程序

考虑您想部署以下应用程序:

部署示例应用

请执行以下步骤来部署示例应用程序:

  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

    注意

    您必须提供您的 NetScaler 控制台指纹和代理 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

    注意

    您必须提供您的 NetScaler 控制台指纹和代理 IP 地址

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

在 NetScaler 控制台中添加 Kubernetes 群集

要添加库伯内特斯群集,请执行以下操作:

  1. 使用管理员凭据登录 NetScaler 控制台。

  2. 导航到 基础结构 > 调配 > Kubernetes > 群集。 屏幕上将显示“群集”页面。

  3. 单击添加

  4. 在“添加群集”页中,指定以下参数:

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

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

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

        API 服务器 URL

      2. 输入为 Kubernetes 主服务器的运行地址显示的 URL。

    3. 身份验证令牌 -指定身份验证令牌。验证令牌是验证 Kubernetes 群集和 NetScaler 控制台之间通信的访问权限所必需的。要生成身份验证令牌,请执行以下操作:

      在库贝内特斯主节点上:

      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. 要获取密钥字符串,请运行 kubectl describe secret <token-name>

        生成令牌

    4. 从列表中选择座席。

      注意

      确保选择与 CPX YAML 中添加的代理相同。

    5. 单击创建

      添加群集

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

注意

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

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

  1. 导航到“设置”>“NetScaler 控制台许可和分析配置”。

  2. 在“虚拟服务器许可证摘要”下,启用 自动选择虚拟服务器自动选择不可寻址的虚拟服务器

    自动选择虚拟服务器

启用 Web 事务和 TCP 事务设置

添加 Kubernetes 群集并启用自动选择虚拟服务器后,将 Web 事务设置TCP 事务设置更改为全部

  1. 导航到“设置”>“分析设置”。

    屏幕上将显示“设置”页面。

  2. 单击启用分析功能

  3. Web 事务设置下,选择 全部

    web-transaction-settings

  4. TCP 事务设置下,选择 全部

    TCP

  5. 单击确定

向微服务发送流量

然后,您必须向微服务发送流量,以便在 NetScaler 控制台中填充服务图。

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

样本

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

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