33. 轮换 webhook 证书

Linkerd 使用 Kubernetes admission webhooksextension API server 来实现其一些核心功能,例如 自动代理注入服务配置文件验证

此外,viz 扩展使用 webhook 使 pod 可点击,就像 jaeger 扩展打开 pod 上的跟踪一样。

为了保护 Kubernetes API serverwebhooks 之间的连接,所有 webhooks 都启用了 TLS。 这些 webhooks 使用的 x509 证书由嵌入在 webhooks 配置中的自签名 CA 证书颁发。

默认情况下,这些证书的有效期为 365 天。它们存储在以下 secret 中:

  • linkerd 命名空间: linkerd-policy-validator-k8s-tls, linkerd-proxy-injector-k8s-tlslinkerd-sp-validator-k8s-tls
  • linkerd-viz 命名空间: tap-injector-k8s-tls
  • linkerd-jaeger 命名空间: jaeger-injector-k8s-tls

本文档的其余部分提供了有关如何续订这些证书的说明。

更新 webhook 证书

要检查所有 TLS secret 的有效性(使用 step):

# assuming you have viz and jaeger installed, otherwise trim down these arrays
# accordingly
SECRETS=("linkerd-policy-validator-k8s-tls" "linkerd-proxy-injector-k8s-tls" "linkerd-sp-validator-k8s-tls" "tap-injector-k8s-tls" "jaeger-injector-k8s-tls")
NS=("linkerd" "linkerd" "linkerd-viz" "linkerd-jaeger")
for idx in "${!SECRETS[@]}"; do \
  kubectl -n "${NS[$idx]}" get secret "${SECRETS[$idx]}" -ojsonpath='{.data.tls\.crt}' | \
    base64 --decode - | \
    step certificate inspect - | \
    grep -iA2 validity; \
done

手动删除这些 secret 并使用 upgrade/install 重新创建它们:

for idx in "${!SECRETS[@]}"; do \
  kubectl -n "${NS[$idx]}" delete secret "${SECRETS[$idx]}"; \
done

linkerd upgrade | kubectl apply -f -
linkerd viz install | kubectl apply -f -
linkerd jaeger install | kubectl apply -f -

上面的命令将在不重新启动 Linkerd 的情况下重新创建 secret

确认使用新证书重新创建 secret

for idx in "${!SECRETS[@]}"; do \
  kubectl -n "${NS[$idx]}" get secret "${SECRETS[$idx]}" -ojsonpath='{.data.crt\.pem}' | \
    base64 --decode - | \
    step certificate inspect - | \
    grep -iA2 validity; \
done

确保 Linkerd 保持健康:

linkerd check

通常不需要重新启动实现 webhookAPI 服务pod。 但是如果集群很大,或者有很高的 pod churn,建议手动重启 pod,以避免级联故障

如果您发现证书到期错误CA 证书不匹配,请使用以下命令重新启动它们的 pod

kubectl -n linkerd rollout restart deploy \
  linkerd-proxy-injector \
  linkerd-sp-validator \

kubectl -n linkerd-viz rollout restart deploy tap tap-injector
kubectl -n linkerd-jaeger rollout restart deploy jaeger-injector