安装 Alauda Service Mesh

安装 Alauda Service Mesh 包括四个主要部分:

  • 安装 Alauda Service Mesh v2 Operator
  • 部署 Istio CNI 插件
  • 部署 Istio 控制平面
WARNING

请勿将 Alauda Service Mesh v2 安装到已经运行 Alauda Service Mesh 的集群中,否则可能导致功能冲突。

只有在按照迁移将网格从 Alauda Service Mesh 迁移到 Alauda Service Mesh v2 时,两个版本才会并行运行;该操作会使用现有网格的设置安装控制平面,并在最后移除旧版本。请勿以其他任何方式将 Alauda Service Mesh v2 安装在现有网格旁边。

NOTE

确认集群版本与计划部署的 Istio 版本匹配:Istio 1.30 支持 Kubernetes 1.32 到 1.36,Istio 1.28 支持 Kubernetes 1.30 到 1.34。

使用 Alauda Service Mesh v2 Operator 部署 Istio

要使用 Alauda Service Mesh v2 Operator 部署 Istio,必须创建 Istio 资源。 Operator 随后会创建 IstioRevision 资源,每个资源代表 Istio 控制平面的一个独立修订版本。 之后,Istio 控制平面将根据这些 IstioRevision 资源进行部署。

如果将 Istio 资源的更新策略设置为 RevisionBased,Operator 可能会创建其他 IstioRevision 资源来管理控制平面升级。

安装 Alauda Service Mesh v2 Operator

通过 Web 控制台安装

前提条件

  • 必须已上传 Alauda Service Mesh v2。

  • 您已作为 cluster-admin 登录 Alauda Container Platform Web 控制台。

  • 必须已安装 Alauda Container Platform Multi-Network(之前称为 Alauda Container Platform Networking for Multus)插件,并且 kube-ovn 必须为 v4.1.5 或更高版本。

    必须先安装 Multus 插件,然后才能安装 Alauda Service Mesh v2 Operator。

    如果先安装了 Operator,则必须在安装 Multus 插件后卸载并重新安装 Operator。

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,进入管理员。
  2. 选择 Marketplace > OperatorHub。
  3. 搜索 Alauda Service Mesh v2。
  4. 找到 Alauda Service Mesh v2,然后单击以选中它。
  5. 单击安装。
  6. 在安装 Alauda Service Mesh v2对话框中,执行以下步骤:
    1. 选择一个频道
      • 选择 stable 频道以安装最新稳定版本的 Alauda Service Mesh v2 Operator。这是安装 Operator 的默认频道。
      • 要安装特定版本的 Alauda Service Mesh v2 Operator,请选择对应的 stable-<version> 频道。例如,要安装 Alauda Service Mesh v2 Operator 2.0.x 版本,请使用 stable-2.0 频道。
  7. 单击安装,然后单击确认以安装 Operator。

验证

在安装信息部分中,确认 Operator 安装状态显示为 Succeeded。

通过 CLI 安装

前提条件

  • 必须已上传 Alauda Service Mesh v2。

  • 集群管理员已通过具有 cluster-admin 角色的活动 ACP CLI(kubectl)会话登录。

  • 必须已安装 Alauda Container Platform Multi-Network(之前称为 Alauda Container Platform Networking for Multus)插件,并且 kube-ovn 必须为 v4.1.5 或更高版本。

    必须先安装 Multus 插件,然后才能安装 Alauda Service Mesh v2 Operator。

    如果先安装了 Operator,则必须在安装 Multus 插件后卸载并重新安装 Operator。

操作步骤

  1. 检查可用版本

    (
      echo -e "CHANNEL\tNAME\tVERSION"
      kubectl get packagemanifest servicemesh-operator2 -o json | jq -r '
        .status.channels[] |
        .name as $channel |
        .entries[] |
        [$channel, .name, .version] | @tsv
      '
    ) | column -t -s $'\t'

    示例输出

    CHANNEL     NAME                             VERSION
    stable      servicemesh-operator2.v2.2.0-r1  2.2.0-r1
    stable-2.2  servicemesh-operator2.v2.2.0-r1  2.2.0-r1

    字段:

    • CHANNEL:Operator 频道名称
    • NAME:CSV 资源名称
    • VERSION:Operator 版本
  2. 确认 catalogSource

    kubectl get packagemanifests servicemesh-operator2 -ojsonpath='{.status.catalogSource}'

    示例输出

    platform

    这表示 servicemesh-operator2 来自 platform catalogSource。

  3. 创建命名空间

    kubectl get namespace sail-operator || kubectl create namespace sail-operator
  4. 创建 Subscription

    kubectl apply -f - <<EOF
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      annotations:
        cpaas.io/target-namespaces: ""
      labels:
        catalog: platform
      name: servicemesh-operator2
      namespace: sail-operator
    spec:
      channel: stable
      installPlanApproval: Manual
      name: servicemesh-operator2
      source: platform
      sourceNamespace: cpaas-system
      startingCSV: servicemesh-operator2.v2.2.0-r1
    EOF

    字段说明

    • 注释 cpaas.io/target-namespaces:建议将其设置为空;为空表示集群范围的安装。
    • .metadata.name:Subscription 名称(符合 DNS 规范,最多 253 个字符)。
    • .metadata.namespace:安装 Operator 的命名空间。
    • .spec.channel:订阅的 Operator 频道。
    • .spec.installPlanApproval:批准策略(Manual 或 Automatic)。此处,Manual 要求手动批准安装或升级。
    • .spec.source:Operator catalogSource。
    • .spec.sourceNamespace:必须设置为 cpaas-system,因为平台提供的所有 catalogSource 都位于此命名空间中。
    • .spec.startingCSV:指定 Manual 批准模式下要安装的版本;为空时默认为频道中的最新版本。Automatic 模式不需要此字段。
  5. 检查 Subscription 状态

    kubectl -n sail-operator get subscriptions servicemesh-operator2 -o yaml

    关键输出

    • .status.state:UpgradePending 表示 Operator 正在等待安装或升级。
    • Condition InstallPlanPending = True:正在等待手动批准。
    • .status.currentCSV:最新的已订阅 CSV。
    • .status.installPlanRef:关联的 InstallPlan;必须批准该 InstallPlan 后才能继续安装。

    等待 InstallPlanPending 条件变为 True:

    kubectl -n sail-operator wait --for=condition=InstallPlanPending subscription servicemesh-operator2 --timeout=2m
  6. 批准 InstallPlan

    kubectl -n sail-operator get installplan \
      "$(kubectl -n sail-operator get subscriptions servicemesh-operator2 -o jsonpath='{.status.installPlanRef.name}')"

    示例输出

    NAME            CSV                               APPROVAL   APPROVED
    install-rlgnp   servicemesh-operator2.v2.2.0-r1   Manual     false

    手动批准

    PLAN="$(kubectl -n sail-operator get subscription servicemesh-operator2 -o jsonpath='{.status.installPlanRef.name}')"
    kubectl -n sail-operator patch installplan "$PLAN" --type=json -p='[{"op": "replace", "path": "/spec/approved", "value": true}]'

验证

等待 CSV 创建;Phase 变为 Succeeded:

CSV="$(kubectl -n sail-operator get subscription servicemesh-operator2 -o jsonpath='{.status.currentCSV}')"
kubectl -n sail-operator wait --for=create "csv/${CSV}" --timeout=2m
kubectl -n sail-operator wait --for=jsonpath='{.status.phase}'=Succeeded "csv/${CSV}" --timeout=3m

检查 CSV 状态:

kubectl -n sail-operator get csv

示例输出

NAME                              DISPLAY                  VERSION    REPLACES   PHASE
servicemesh-operator2.v2.2.0-r1   Alauda Service Mesh v2   2.2.0-r1              Succeeded

字段

  • NAME:已安装的 CSV 名称
  • DISPLAY:Operator 显示名称
  • VERSION:Operator 版本
  • REPLACES:升级期间被替换的 CSV
  • PHASE:安装状态(Succeeded 表示成功)

Operator 安装的自定义资源定义

Operator 会安装以下类别的自定义资源定义(CRD):

  • Sail Operator CRD: 这些 CRD 属于 sailoperator.io API 组,用于定义管理 Istio 组件的自定义资源,包括 Istio、IstioRevision、IstioCNI 和 ZTunnel。 详情请参阅 Sail Operator API 参考。

  • Istio CRD: 这些 CRD 用于管理网格配置、服务发现、流量路由和可观测性。它们属于 istio.io API 组,例如 networking.istio.io、security.istio.io 和 telemetry.istio.io。 有关配置指南,请参阅 Istio 文档。

部署 Istio 组件

必须创建 Istio 和 IstioCNI 两种自定义资源,才能部署控制平面和 Istio CNI 插件。

必须在不同的命名空间中创建这些 Istio 和 IstioCNI 资源。

创建 IstioCNI 的命名空间

kubectl create namespace istio-cni

创建 IstioCNI 资源

通过 Web 控制台创建

创建 Istio Container Network Interface(CNI)资源,其中包含 Istio CNI 插件的配置文件。 Alauda Service Mesh v2 Operator 使用此资源的配置来部署 CNI Pod。

先决条件

  • 你已作为 cluster-admin 登录 Alauda Container Platform Web 控制台。
  • 必须已安装 Alauda Service Mesh v2 Operator。
  • 必须已安装 Alauda Container Platform Multi-Network 插件(原 Alauda Container Platform Networking for Multus),且 kube-ovn 版本必须为 v4.1.5 或更高版本。

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,导航到 Administrator。
  2. 选择 Marketplace > OperatorHub。
  3. 搜索 Alauda Service Mesh v2。
  4. 找到 Alauda Service Mesh v2,然后单击将其选中。
  5. 单击 All Instances 选项卡。
  6. 单击 Create。
  7. 找到并选择 IstioCNI,然后单击 Create。
  8. 从 Namespace 下拉列表中选择 istio-cni。
  9. 单击 YAML 选项卡。
  10. 将以下 YAML 片段添加到 YAML 代码编辑器中:
    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    spec:
      # Applying the following contents to the yaml code editor:
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d
          excludeNamespaces:
            - istio-cni
            - kube-system
  11. 单击 Create。

验证

等待 IstioCNI 资源的 .status.state 字段变为 Healthy。

通过 CLI 创建

先决条件

  • 集群管理员以具有 cluster-admin 角色的身份建立了活动的 ACP CLI(kubectl)会话。
  • 必须已安装 Alauda Service Mesh v2 Operator。
  • 必须已安装 Alauda Container Platform Multi-Network 插件(原 Alauda Container Platform Networking for Multus),且 kube-ovn 版本必须为 v4.1.5 或更高版本。

操作步骤

  1. 运行以下命令创建 IstioCNI 资源:

    cat <<EOF | kubectl apply -f -
    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      version: v1.30.4
      namespace: istio-cni
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d
          excludeNamespaces:
            - istio-cni
            - kube-system
    EOF
  2. 运行以下命令,等待 IstioCNI 资源返回 Ready 状态条件:

    kubectl wait --for condition=Ready istiocni/default --timeout=3m

创建 Istio 的命名空间

kubectl create namespace istio-system

创建 Istio 资源

通过 Web 控制台创建

创建 Istio 资源,其中将包含 Istio 部署的 YAML 配置。 Alauda Service Mesh v2 Operator 使用此资源的配置来部署 Istio 控制平面。

先决条件

  • 必须已安装 Alauda Service Mesh v2 Operator。
  • 你已作为 cluster-admin 登录 Alauda Container Platform Web 控制台。
  • 必须已安装 Alauda Container Platform Multi-Network 插件(原 Alauda Container Platform Networking for Multus),且 kube-ovn 版本必须为 v4.1.5 或更高版本。

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,导航到 Administrator。

  2. 选择 Marketplace > OperatorHub。

  3. 搜索 Alauda Service Mesh v2。

  4. 找到 Alauda Service Mesh v2,然后单击将其选中。

  5. 单击 All Instances 选项卡。

  6. 单击 Create。

  7. 找到并选择 Istio,然后单击 Create。

  8. 从 Namespace 下拉列表中选择 istio-system。

  9. 单击 YAML 选项卡。

  10. 将以下 YAML 片段添加到 YAML 代码编辑器中:

    apiVersion: sailoperator.io/v1
    kind: Istio
    spec:
      # Applying the following contents to the yaml code editor:
      values:
        global:
          proxy:
            seccompProfile:
              type: RuntimeDefault
    1. 将 spec.values.global.proxy.seccompProfile.type 设置为 RuntimeDefault,即可为控制平面注入应用 Pod 的 istio-validation 和 istio-proxy 容器添加 RuntimeDefault seccomp 配置文件。注入的 sidecar 随后即可满足 Restricted Pod Security Admission (PSA) 配置文件的要求。仅当没有应用命名空间强制执行 Restricted 配置文件时,才省略此设置。更多信息请参阅 Pod Security Admission。
  11. 单击 Create。

验证

等待 Istio 资源的 .status.state 字段变为 Healthy。

通过 CLI 创建

先决条件

  • 集群管理员以具有 cluster-admin 角色的身份建立了活动的 ACP CLI(kubectl)会话。
  • 必须已安装 Alauda Service Mesh v2 Operator。
  • 必须已安装 Alauda Container Platform Multi-Network 插件(原 Alauda Container Platform Networking for Multus),且 kube-ovn 版本必须为 v4.1.5 或更高版本。

操作步骤

  1. 运行以下命令创建 Istio 资源:

    cat <<EOF | kubectl apply -f -
    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      version: v1.30.4
      namespace: istio-system
      values:
        global:
          proxy:
            seccompProfile:
              type: RuntimeDefault # [!code callout]
    EOF
    1. 将 spec.values.global.proxy.seccompProfile.type 设置为 RuntimeDefault,即可为控制平面注入应用 Pod 的 istio-validation 和 istio-proxy 容器添加 RuntimeDefault seccomp 配置文件。注入的 sidecar 随后即可满足 Restricted Pod Security Admission (PSA) 配置文件的要求。仅当没有应用命名空间强制执行 Restricted 配置文件时,才省略此设置。更多信息请参阅 Pod Security Admission。
  2. 运行以下命令,等待 Istio 控制平面返回 Ready 状态条件:

    kubectl wait --for condition=Ready istio/default --timeout=3m

其他资源