Citadel 的健康检查

你可以启用 Citadel 的健康检查功能去检测 Citadel CSR(证书签名请求)服务是否有故障。当检测到服务发生故障,Kubelet 将自动重启 Citadel 容器。

当健康检查功能被开启,Citadel 中的 检测器 模块会定期向 Citadel 的 CSR gRPC 服务发送 CSRs 并校验响应信息以此判断服务的健康状况。如果 Citadel 服务是健康状态,检测器 会更新 健康状态文件更新时间 ,否则什么都不做。Citadel 依赖 Kubernetes 的健康和就绪检测功能,使用命令行检查 pod 中 健康状态文件更新时间 。如果这个文件有一段时间不更新了,Kubelet 将会重启 Citadel 容器。

注意:Citadel 的健康检查目前只提供了对 CSR 服务 API 的支持,如果没有使用 SDS 或者额外的虚拟机器

开始之前

为了完成这个任务,你可以安装 Istio,并设置 global.mtls.enabledtrue

部署启用健康检查的 Citadel

重新部署 Citadel 启用健康检查:

  1. $ istioctl manifest generate --set values.global.mtls.enabled=true,values.security.citadelHealthCheck=true > citadel-health-check.yaml
  2. $ kubectl apply -f citadel-health-check.yaml

确认健康检查器是否工作

Citadel 会记录健康检查的结果,运行下面的命令行:

  1. $ kubectl logs `kubectl get po -n istio-system | grep istio-citadel | awk '{print $1}'` -n istio-system | grep "CSR signing service"

会看到类似下面这样的输出:

  1. ... CSR signing service is healthy (logged every 100 times).

上面的日志表明周期性的健康检查已经启动。默认的健康检查间隔为 15 秒,每 100 个检查记录一次。

(可选)健康检查的配置

这部分的讨论关于如何修改健康检查的配置。打开 citadel-health-check.yaml 文件,并定位到下面的内容:

  1. ...
  2. - --liveness-probe-path=/tmp/ca.liveness # 存活健康检查状态文件的路径
  3. - --liveness-probe-interval=60s # 存活健康状态文件的更新周期
  4. - --probe-check-interval=15s # 健康检查的周期
  5. livenessProbe:
  6. exec:
  7. command:
  8. - /usr/local/bin/istio_ca
  9. - probe
  10. - --probe-path=/tmp/ca.liveness # 健康状态文件的路径
  11. - --interval=125s # 文件修改时间和当前系统时钟的最大时间差
  12. initialDelaySeconds: 60
  13. periodSeconds: 60
  14. ...

健康状态文件的路径为 liveness-probe-pathprobe-path。你应该同时更新在 Citadel 和 livenessProbe 中的路径。如果 Citadel 是健康的,liveness-probe-interval 的值用于更新健康状态文件的周期。Citadel 的健康检查控制器使用 probe-check-interval 的值作为请求 Citadel CSR 服务的周期。interval 是自上次更新健康状况文件至今的最长时间,供检测器判断 Citadel 是否健康。initialDelaySecondsperiodSeconds 的值确定初始化延迟以及每次激活 livenessProbe 的时间间隔。

延长 probe-check-interval 会减少健康检查的开销,但是一旦遇到故障情况,健康监测器也会更晚的得到故障信息。为了避免检测器因为临时故障重启 Citadel,检测器的 interval 应该设置为 liveness-probe-intervalN 倍,这样就让检测器能够容忍持续 N-1 次的检查失败。

清理

  • 在 Citadel 上禁用健康检查:
  1. $ istioctl manifest apply --set values.global.mtls.enabled=true

相关内容

Istio 服务的健康检查

为您展示如何对 Istio 服务做健康检查。

Istio 2020——为了商用

Istio 在 2020 年的愿景声明及路线图。

移除跨 pod Unix domain socket

一种更安全的秘密管理方式。

DNS 证书管理

在 Istio 中配置和管理 DNS 证书。

Istio v1beta1 授权策略概述

Istio v1beta1 授权策略的设计原则、基本概述及迁移操作。

安全管理 Webhook

一种更安全管理 Istio webhook 的方法。