在集群内控制层面上启用可选功能
本页介绍了如何在具有集群内控制平面的 Cloud Service Mesh 上启用可选功能。
安装集群内 Cloud Service Mesh 时,默认启用的功能因平台而异。您可以替换默认配置并启用可选功能,方法是
包括在安装(或升级)Cloud Service Mesh 时包含叠加层文件。叠加文件是一个 YAML 文件,其中包含您用于配置控制平面的 IstioOperator
自定义资源 (CR)。请在每个叠加文件中指定一个功能。您可以叠加多个文件,每个叠加文件会覆盖之前各层的配置。
关于叠加文件
此页面上的叠加层文件位于
anthos-service-mesh
软件包。这些文件包含默认配置的常见自定义。您可以按原样使用这些文件,也可以根据需要对这些文件进行其他更改。
使用 asmcli
脚本安装 Cloud Service Mesh 时,您可以使用 --option
或 --custom_overlay
选项指定一个或多个叠加文件。如果无需对
文件位于 anthos-service-mesh
代码库中,您可以使用 --option
;以及
该脚本会为您从 GitHub 提取文件。否则,您可以
更改叠加层文件,然后使用 --custom_overlay
选项
并将其传递给 asmcli
。
不要在一个叠加文件中包含多个 CR | 为每个 CR 创建单独的叠加文件 |
---|---|
如何启用可选功能
以下示例经过简化,仅显示自定义叠加层以启用可选功能。将 OTHER_FLAGS
替换为所需的安装标志。
asmcli install
命令提供两种启用可选功能的方法。您使用的方法取决于您是否需要更改叠加层文件。
如果不需要对叠加层文件进行任何更改,请使用
--option
。使用--option
时,asmcli
会从 GitHub 代码库中为您提取该文件,因此您必须连接到互联网。./asmcli install \ OTHER_FLAGS \ --option OPTION_NAME
将
OPTION_NAME
替换为您要启用的选项。请务必省略 .yaml 扩展名,并仅包含叠加文件的名称,例如iap-operator
和attached-cluster
。如需查看选项列表,请参阅anthos-service-mesh
软件包。如果您需要自定义叠加层文件,请使用
--custom_overlay
。./asmcli install \ OTHER_FLAGS \ --custom_overlay PATH_TO_FILE
将
PATH_TO_FILE
替换为您要使用的叠加层文件的路径。
用于可选功能的 YAML
以下几个部分提供用于启用可选功能和支持的功能的 YAML。
mTLS STRICT
模式
global.mtls.enabled
配置已从 IstioOperator
CR 中移除,以避免升级出现问题并提供更灵活的安装。如需启用 STRICT
mTLS,请改为配置对等身份验证政策。
Distroless 代理映像
最佳做法是将容器运行时的内容限制为仅包含必要的软件包。此方法可提高常见漏洞和披露 (CVE) 扫描程序的安全性和信噪比。Istio 提供基于 Distroless 基础映像的代理映像。
以下配置可为整个 Cloud Service Mesh 启用 Distroless 映像。映像类型更改要求每个 pod 重启并重新注入才能生效。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
defaultConfig:
image:
imageType: distroless
Distroless 映像不包含代理以外的任何二进制文件。因此,无法使用 exec
shell 或使用容器中的 curl
、ping
或其他调试实用程序。
如果您运行 curl 命令,会看到以下错误:
error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "<container-id>"
OCI runtime exec failed: exec failed: unable to start container process: exec: "curl": executable file not found in $PATH: unknown
如果您运行 shell 命令,会看到以下错误:
error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "<container-id>"
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "sh": executable file not found in $PATH: unknown
如果您需要为特定 Pod 访问这些工具,则可以使用以下 Pod 注解替换 imageType
。
sidecar.istio.io/proxyImageType: debug
通过注解更改部署的映像类型后,部署应重启。
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
对于大多数代理调试类型,应使用 istioctl proxy-cmd
,它无需调试基础映像。
为自定义注册表使用自定义叠加层
例如,如果您需要从自定义容器注册表安装 Cloud Service Mesh,那么您可以为自定义注册表使用自定义叠加层。例如:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
hub: {private_registry_url}
下面是您需要镜像到自定义容器注册表的 Cloud Service Mesh 映像的列表:
- Install-cni -
gke.gcr.io/asm/install-cni:1.22.5-asm.1
- Managed Data Plane -
gke.gcr.io/asm/mdp:1.22.5-asm.1
- Pilot -
gke.gcr.io/asm/pilot:1.22.5-asm.1
- Proxyv2 -
gke.gcr.io/asm/proxyv2:1.22.5-asm.1
将映像添加到私有存储库
如需将 Cloud Service Mesh 映像推送到私有注册表,请完成以下步骤。
-
拉取 Cloud Service Mesh 映像:
docker pull gke.gcr.io/asm/install-cni:1.22.5-asm.1 docker pull gke.gcr.io/asm/mdp:1.22.5-asm.1 docker pull gke.gcr.io/asm/pilot:1.22.5-asm.1 docker pull gke.gcr.io/asm/proxyv2:1.22.5-asm.1
-
为私有注册表网址创建变量:
将export PRIVATE_REGISTRY_URL=PRIVATE_REGISTRY_URL
PRIVATE_REGISTRY_URL
替换为您的私有注册表 网址。 -
使用您的私有注册表网址标记映像:
docker tag gke.gcr.io/asm/install-cni:1.22.5-asm.1 \ ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/install-cni:1.22.5-asm.1 docker tag gke.gcr.io/asm/mdp:1.22.5-asm.1 \ ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/mdp:1.22.5-asm.1 docker tag gke.gcr.io/asm/pilot:1.22.5-asm.1 \ ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/pilot:1.22.5-asm.1 docker tag gke.gcr.io/asm/proxyv2:1.22.5-asm.1 \ ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/proxyv2:1.22.5-asm.1
- 将带有标记的映像推送到您的私有注册表:
docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/install-cni:1.22.5-asm.1 docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/mdp:1.22.5-asm.1 docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/pilot:1.22.5-asm.1 docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/proxyv2:1.22.5-asm.1
- (可选)如果您使用规范服务,请将规范服务映像添加到您的私有注册表。
- 拉取 Cloud Service Mesh 规范服务映像:
docker pull gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 docker pull gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
- 使用您的私有注册表网址标记映像:
docker tag gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 \ ${PRIVATE_REGISTRY_URL}/gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 docker tag gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16 \ ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
- 将带有标记的映像推送到您的私有注册表:
docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/kube-rbac-proxy:v0.13.1 docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
- 拉取 Cloud Service Mesh 规范服务映像:
如果您可以从私有存储库中拉取标记的映像,则过程已成功。
增加终止排空时长
默认情况下,当 Pod 终止时,Envoy 将等待 5 秒 (5s
),以便现有连接完成。
Pod terminationGracePeriodSeconds
必须大于 terminationDrainDuration
值。
如需了解详情,请参阅全局网格选项。
---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
defaultConfig:
terminationDrainDuration: 30s
启用访问日志
如需了解详情,请参阅启用 Envoy 的访问日志记录。
Cloud Trace
可以在以下平台上安装的 Cloud Service Mesh 使用 Cloud Trace:
- GKE on Google Cloud
- 本地 GKE Enterprise 集群(如果您使用 Cloud Service Mesh 证书授权机构进行安装)
如需了解详情,请参阅访问跟踪记录。
通过出站流量网关出站
Istio 容器网络接口
如何启用 Istio 容器网络接口 (CNI) 取决于安装 Cloud Service Mesh 的环境。
选择与您的平台相匹配的叠加文件。
在 GKE 上启用 CNI
在本地启用 CNI
为非 Google Cloud 启用流量日志
默认情况下,在 Google Cloud 外部使用 Istio CA 安装 Cloud Service Mesh 会向 Prometheus 报告指标。使用此选项可启用“报告流量”功能 或同时运行 Prometheus 和 Stackdriver,因此您可以使用 Cloud Service Mesh 信息中心。
仅 Stackdriver
Stackdriver 和 Prometheus
启用内部负载平衡器
我们建议您按照安装和升级网关中的说明安装注入的网关,以在 GKE 上设置内部负载均衡器。配置网关服务时,请添加注释:networking.gke.io/load-balancer-type: "Internal"
入站流量网关上的外部证书管理
如需了解如何使用 Envoy SDS 在入站流量网关上启用外部证书管理,请参阅安全网关。