HashiCorp learnサイトのVaultサーバからk8s認証の設定箇所 • サイト記載の以下「 “https://$K8S_HOST:8443”」箇所は、Minikubeで動かしているk8s masterのURLを前 提にしている。AWS EKSなどk8s稼働環境によって値が異なるので注意する。 HashiCorp learnサイトの「Step 4: Leverage Vault Agent Auto-Auth」の例では、InitContainer(vault- agent-auth)と、SideCar(consul-template)でvaultサーバからシークレット値を取得し、Volume経由でアプリコンテナ (nginx-container)へ、シークレット値を含むindex.htmlファイルを連携している。この仕組みを流用する事で、vaultサー バから取得するシークレット値を、任意のアプリコンテナへ任意のファイルで連携出来る。 # vault write auth/kubernetes/config ¥ token_reviewer_jwt="$SA_JWT_TOKEN" ¥ kubernetes_host="https://$K8S_HOST:8443" ¥ kubernetes_ca_cert="$SA_CA_CRT“ # kubectl cluster-info Kubernetes master is running at https://303EF9D10F488446E748D87827378187.gr7.us-east-1.eks.amazonaws.com 私のAWS EKS環境では、k8s masterのURLは以下。 これを「kubernetes_host」に指定する。 vault { renew_token = false vault_agent_token_file = "/home/vault/.vault-token" retry { backoff = "1s" } } template { destination = "/etc/secrets/test01.text" contents = <<EOH {{- with secret "secret/data/myapp/config?version=1" }} { "username": "{{ .Data.data.username }}", "password": "{{ .Data.data.password }}" } {{ end }} EOH } ~~ env: - name: VAULT_ADDR value: http://[vaultサーバのIP]:8200 ~~ ※initContainers(vault-agent-auth)と SideCar(consule- template)のvaultサーバを 指定する環境変数を修正 ~~ volumeMounts: - name: shared-data mountPath: /etc/secrets ~~ ※アプリコンテナ(nginx-container)のmountPathを任意に指定(例) consul-template-config.hcl ※key/value v2版での編集例 example-k8s-spec.yml ※編集例の箇所を抜粋。Consul-templateコンテナで 取得したシークレットファイルをvlumeMounts経由で アプリコンテナへ「/etc/secrets/test01.json」が連携 { “username”: ****, “password”: **** } /etc/secrets/test01.json ※アプリコンテナヘ連携されたファイル