Istio Vault CA 集成

本教程将向您介绍如何在 Istio 中整合 Vault CA 颁发证书的示例。

开始之前

  • 创建一个新的 Kubernetes 集群以运行本教程中的示例。

安装启用 SDS 的 Istio

  • 使用 Helm 安装 Istio 启用 SDS 和向节点代理发送证书签名请求来测试 Vault CA :
  1. $ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user="$(gcloud config get-value core/account)"
  2. $ helm dep update --skip-refresh install/kubernetes/helm/istio
  3. $ cat install/kubernetes/namespace.yaml > istio-auth.yaml
  4. $ cat install/kubernetes/helm/istio-init/files/crd-* >> istio-auth.yaml
  5. $ helm template \
  6. --name=istio \
  7. --namespace=istio-system \
  8. --set global.proxy.excludeIPRanges="35.233.249.249/32" \
  9. --values install/kubernetes/helm/istio/example-values/values-istio-example-sds-vault.yaml \
  10. install/kubernetes/helm/istio >> istio-auth.yaml
  11. $ kubectl create -f istio-auth.yaml

本教程中使用的测试 Vault 服务器的 IP 地址为 35.233.249.249。配置 global.proxy.excludeIPRanges ="35.233.249.249/32" 将测试 Vault 服务器的 IP 地址列入白名单,以便 Envoy 不会拦截从 Node Agent 到 Vault 的流量。

这个 yaml 文件 values-istio-example-sds-vault.yaml包含 Istio 中启用 SDS(密钥发现服务)的配置。Vault CA 相关配置设置为环境变量:

  1. env:
  2. - name: CA_ADDR
  3. value: "https://35.233.249.249:8200"
  4. - name: CA_PROVIDER
  5. value: "VaultCA"
  6. - name: "VAULT_ADDR"
  7. value: "https://35.233.249.249:8200"
  8. - name: "VAULT_AUTH_PATH"
  9. value: "auth/kubernetes/login"
  10. - name: "VAULT_ROLE"
  11. value: "istio-cert"
  12. - name: "VAULT_SIGN_CSR_PATH"
  13. value: "istio_ca/sign/istio-pki-role"

部署测试工作负载

本节部署测试工作负载 httpbin。当测试工作负载的 sidecar 通过 SDS 请求证书时,Node Agent 将向 Vault 发送证书签名请求。

  • 生成示例 httpbin 后端的部署:

Zip

  1. $ istioctl kube-inject -f @samples/httpbin/httpbin.yaml@ > httpbin-injected.yaml
  • 部署示例后端:
  1. $ kubectl apply -f httpbin-injected.yaml
  • 列出节点代理的 pod:
  1. $ kubectl get pod -n istio-system -l app=nodeagent -o jsonpath={.items..metadata.name}
  • 查看每个节点代理的日志。驻留在与测试工作负载相同的节点上的节点代理将包含与 Vault 相关的日志。
  1. $ kubectl logs -n istio-system THE-POD-NAME-FROM-PREVIOUS-COMMAND
  • 因为在此示例中,Vault 未配置为从 httpbin 工作负载接受 Kubernetes JWT 服务帐户,您应该看到 Vault 使用以下日志拒绝签名请求:
  1. 2019-01-16T19:42:19.274291Z info SDS gRPC server start, listen "/var/run/sds/uds_path"
  2. 2019-01-16T19:42:22.015814Z error failed to login Vault: Error making API request.
  3. URL: PUT https://35.233.249.249:8200/v1/auth/kubernetes/login
  4. Code: 500. Errors:
  5. * service account name not authorized
  6. 2019-01-16T19:42:22.016112Z error Failed to sign cert for "default": failed to login Vault at https://35.233.249.249:8200: Error making API request.
  • 生成上述日志后,您已完成本文中的教程,该教程将整合外部 Vault CA 并将证书签名请求路由到 Vault。

清理

完成本教程后,您可以删除在本教程开头创建的测试集群。

相关内容

基于 Istio 的 Micro-Segmentation 授权

描述 Istio 的授权功能以及如何在各种用例中使用它。

Citadel 的健康检查

如何在 Kubernetes 中启用 Citadel 的健康检查。

HTTP 服务的访问控制

展示为 HTTP 服务设置基于角色的访问控制方法。

Istio Service 健康检查

展示如何对 Istio service 进行健康检查。

TCP 服务的访问控制

展示如何为 TCP 服务设置基于角色的访问控制。

修复 Citadel

如果 Citadel 表现不正常该怎么办。