在集群控制层面上启用可选功能

本页面介绍如何在集群内控制层面上启用可选功能。如需了解 Google 管理的控制层面,请参阅在代管式 Anthos Service Mesh 上启用可选功能

安装 Anthos Service Mesh 时,默认启用的功能因平台而异。您可以在安装(或升级)Anthos Service Mesh 时添加叠加文件,以启用可选功能。叠加文件是一个 YAML 文件,其中包含您用于配置控制平面的 IstioOperator 自定义资源 (CR)。您可以替换默认配置并启用可选功能,或在叠加文件中停用默认功能。请在每个叠加文件中指定一个功能。您可以叠加多个文件,每个叠加文件会覆盖之前各层的配置。

关于叠加文件

此页面中的叠加文件位于 GitHub 上的 anthos-service-mesh 软件包中。这些文件包含默认配置的常见自定义。您可以按原样使用这些文件,也可以根据需要对这些文件进行其他更改。

  • 使用 istioctl install 命令安装 Anthos Service Mesh 时,可以使用 -f 命令行选项指定一个或多个叠加文件。虽然您可以通过对 istioctl install 使用 --set 选项在命令行中指定配置参数来修改配置,但我们建议您使用叠加文件,以便可以将该文件与其他自定义资源文件一起存储在版本控制系统中。您需要在升级 Anthos Service Mesh 时保留这些文件,以便控制层面在升级后具有相同的配置。

  • 使用 Google 提供的 install_asm 脚本安装 Anthos Service Mesh 时,您可以使用 --option--custom_overlay 选项指定一个或多个叠加文件。如果您不需要对 anthos-service-mesh 代码库中的文件进行任何更改,则可以使用 --option,该脚本将从 GitHub 中提取文件。否则,您可以更改叠加文件,然后使用 --custom_overlay 选项将其传递给 install_asm 脚本。

不要在一个叠加文件中包含多个 CR 为每个 CR 创建单独的叠加文件
一个 YAML 中的多个 CR 每个 CR 的单独 YAML 文件

正在下载 anthos-service-mesh 软件包

要下载 anthos-service-mesh 软件包,请执行以下操作:

以下步骤使用 kpt 从 GitHub 代码库下载 asm 软件包。如果愿意,您也可以改为使用 git clone

  1. 如果您尚未安装 kpt,请进行安装:

    gcloud components install kpt
    
  2. 下载包含这些文件的软件包:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.11 asm
    

    以下示例假定 asm 软件包位于您的当前工作目录中。

如何启用可选功能

如需在安装 Anthos Service Mesh 时启用某项功能,确切的命令会略有不同,具体取决于您的平台以及您使用的是 install_asm 脚本还是 istioctl install 命令。

以下示例经过简化,仅显示自定义叠加层以启用可选功能。将 OTHER_FLAGS 替换为您关注的安装指南中命令行选项。

使用 install_asm 脚本

install_asm 脚本提供两种启用可选功能的方法。您使用的方法取决于您是否需要更改叠加层文件。

  • 如果不需要对叠加层文件进行任何更改,请使用 --option。使用 --option 时,install_asm 会从 GitHub 代码库中为您提取该文件,因此您必须连接到互联网。

    ./install_asm \
      OTHER_FLAGS \
      --option OPTION_NAME
    

    OPTION_NAME 替换为您要启用的选项。如需查看选项列表,请参阅 anthos-service-mesh 软件包。

  • 如果您需要自定义叠加层文件,请使用 --custom_overlay

    ./install_asm \
      OTHER_FLAGS \
      --custom_overlay PATH_TO_FILE
    

    PATH_TO_FILE 替换为您要使用的叠加层文件的路径。

使用 istioctl install 命令

您可以将 istioctl install 命令用于 GKE 上的多项目安装以及非 Google Cloud 上的平台,例如 GKE on VMware。

  • 使用 -f 添加叠加层文件。该软件包可以是 anthos-service-mesh 软件包中的叠加层文件,而无需进行自定义或自定义叠加层文件。

    istioctl install  \
     OTHER_FLAGS \
     -f PATH_TO_FILE
    

    PATH_TO_FILE 替换为您要使用的叠加层文件的路径。

用于可选功能的 YAML

以下几个部分提供用于启用可选功能和支持的功能的 YAML。

mTLS STRICT 模式

global.mtls.enabled 配置已从 IstioOperator CR 中移除,以避免升级出现问题并提供更灵活的安装。如需启用 STRICT mTLS,请改为配置对等身份验证政策

将 Envoy 定向到 stdout

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    accessLogFile: "/dev/stdout"

如需了解详情,请参阅启用 Envoy 的访问日志记录

Cloud Trace

可以在以下平台上安装的 Anthos Service Mesh 使用 Cloud Trace:

  • GKE on Google Cloud
  • 本地 GKE Enterprise 集群(如果您使用 Anthos Service Mesh 证书授权机构 [Mesh CA] 进行安装)

如需详细了解价格信息,请参阅 Cloud Trace 价格页面

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
  values:
    global:
      proxy:
        tracer: stackdriver

默认采样率为 1%,但您可以通过指定 tracing.sampling 值来替换默认值。值必须在 0.0 到 100.0 的范围内,且精确率为 0.01。例如,如需跟踪每 10000 个请求中的 5 个,请使用 0.05。

以下示例展示了 100% 的采样率(仅用于演示或问题排查目的)。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    defaultConfig:
      tracing:
        sampling: 100
  values:
    global:
      proxy:
        tracer: stackdriver

请注意,跟踪器配置目前是代理引导配置的一部分,因此每个 pod 需要重启并重新注入才能获取跟踪器更新。例如,您可以使用以下命令重启属于某个部署的 pod:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

跟踪上下文传播

虽然 Sidecar 代理可以自动发送跟踪记录 span,但它们需要一些提示来将整个跟踪记录关联在一起。应用需要传播适当的 HTTP 标头,以便在代理发送 span 信息时,span 可以正确地关联到单个跟踪记录中。

为此,应用需要从传入请求中收集相应标头并将其传播到任何传出请求:Anthos Service Mesh Stackdriver 跟踪配置将接受以下任意标头格式,并传播以下所有格式:

  • B3(x-b3-traceidx-b3-spanidx-b3parentspanidx-b3-sampledx-b3-flags
  • W3C TraceContext (traceparent)
  • Google Cloud Trace (x-cloud-trace-context)
  • gRPC TraceBin (grpc-trace-bin)

这意味着您的应用可以使用其中任何一种格式来传播跟踪上下文,生成跟踪记录,并设置为适当的 Stackdriver。

示例

以下是原始请求带有 traceparent 标头的示例 HTTP-Get 请求。请注意代理添加的其他跟踪记录上下文标头。

$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
*   Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
  "args": {
    "freeform": ""
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "application/json",
    "Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
    "Host": "httpbin:8000",
    "Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
    "User-Agent": "curl/7.80.0-DEV",
    "X-B3-Sampled": "1",
    "X-B3-Spanid": "a0c798646d74cef0",
    "X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
    "X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
    "X-Envoy-Attempt-Count": "1",
    "X-Forwarded-Client-Cert": "<REDACTED>"
  },
  "json": null,
  "method": "GET",
  "origin": "127.0.0.6",
  "url": "http://httpbin:8000/anything?freeform="
}

请注意,在返回的请求标头集中,存在完整的跟踪上下文标头集。

如需查看更多传播标头的示例,请参阅跟踪上下文传播

使用自定义 ID 从客户端创建跟踪记录

如要从具有自定义 ID 的客户端创建跟踪记录,请使用 curl 命令创建包含外部客户端的请求,并强制其显示跟踪记录。例如:

curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"

如需详细了解 x-client-trace-id,请参阅 Envoy 文档

Istio 容器网络接口

如何启用 Istio 容器网络接口 (CNI) 取决于安装 Anthos Service Mesh 的环境。

  1. 启用网络政策

  2. 选择与您的平台相匹配的叠加文件。

在 GKE 上启用 CNI

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    cni:
      enabled: true
      namespace: kube-system
  values:
    cni:
      cniBinDir: /home/kubernetes/bin
      excludeNamespaces:
        - istio-system
        - kube-system

在本地启用 CNI

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    cni:
      enabled: true
      namespace: kube-system
  values:
    cni:
      cniBinDir: /opt/cni/bin
      excludeNamespaces:
        - istio-system
        - kube-system
        - gke-system

启用内部负载均衡器

对于 GKE 上的安装,可为 Istio 入站流量网关启用内部负载均衡器。

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    ingressGateways:
      - name: istio-ingressgateway
        enabled: true
        k8s:
          serviceAnnotations:
            cloud.google.com/load-balancer-type: "internal"
          service:
            ports:
              - name: status-port
                port: 15020
              - name: http2
                port: 80
                targetPort: 8080
              - name: https
                port: 443
                targetPort: 8443

入站流量网关上的外部证书管理

如需了解如何使用 Envoy SDS 在入站流量网关上启用外部证书管理,请参阅安全网关