Kubernetes에서 Consul용 서비스 메시 인증 기관(CA) 구성

Kubernetes에서 Consul용 서비스 메시 인증 기관(CA) 구성 (Configure Service Mesh CA for Consul on Kubernetes)

connect가 활성화되면 내장 Consul CA 제공자가 서비스 메시 인증 기관(CA)으로 자동 활성화돼요. Consul 서비스 메시에서 다른 CA 제공자를 사용할 수 있어요.

출처: 문서

본문

connect가 활성화되면 내장 Consul CA 제공자가 서비스 메시 인증 기관(CA)으로 자동 활성화돼요. Consul 서비스 메시에서 다른 CA 제공자를 사용할 수 있어요. 지원 제공자에 대해서는 서비스 메시 인증서 관리를 참고해요.

개요 (Overview)

다음 지침은 Consul K8s CLI 0.38.0 이상으로 클러스터를 처음 부트스트랩하는 동안에만 완료해야 해요. 기존 클러스터에서 Consul 서비스 메시 CA 제공자를 업데이트하거나 토큰 같은 제공자 속성을 업데이트하려면 CA 구성 업데이트 엔드포인트를 참고해요.

Consul Helm 차트를 사용해 외부 CA 제공자를 구성하려면 다음 단계를 완료해요:

  1. 제공자 정보를 포함하는 구성 파일을 생성해요.
  2. 구성 파일을 포함하는 Kubernetes secret을 생성해요.
  3. Helm 차트의 server.extraVolumes 값에서 Kubernetes secret을 참조해요.

기존 Consul 설치에서 활성화하는 대신 새 설치에서 Vault 서비스 메시 제공자를 활성화하려면 Kubernetes에서 Vault를 서비스 메시 인증서 제공자로 사용을 참고해요.

Vault를 서비스 메시 CA로 구성 (Consul K8s 0.37.0 이하) (Configuring Vault as a Service Mesh CA (Consul K8s 0.37.0 and earlier))

다음 지침은 Consul K8s CLI 0.37.0 이전 버전에서만 유효해요. Vault를 서비스 메시 CA로 구성하는 방법을 설명해요. 클러스터의 초기 부트스트랩 동안 제공자에 맞는 적절한 ca_config와 ca_provider 값을 제공해 다른 제공자를 구성할 수 있어요.

자동 갱신(Auto-renewal): Vault를 서비스 메시 CA로 사용한다면 토큰 자동 갱신을 지원하는 Consul 1.8.5 이상을 강력히 권장해요. Vault 토큰이 갱신 가능(renewable)하면 Consul은 주기적으로 토큰을 자동 갱신해요. 그렇지 않으면 Vault 토큰이 만료되기 전에 수동으로 교체해야 해요.

기본 데이터센터 (Primary Datacenter)

Consul 서비스 메시의 CA 제공자로 Vault를 구성하려면 먼저 제공자 구성 JSON 파일을 생성해요. 구성 옵션은 Vault를 서비스 메시 CA로 사용을 참고해요. token 속성에 Vault 토큰을 제공해야 해요. 토큰이 가져야 하는 권한은 이 문서를 참고해요. 이 토큰은 갱신 가능해야 해요.

CA를 제공하려면 먼저 CA를 포함하는 Kubernetes secret을 생성해야 해요. 예를 들어 다음과 같이 Vault CA로 secret을 생성할 수 있어요:

kubectl create secret generic vault-ca --from-file vault.ca=/path/to/your/vault/ca

그런 다음 제공자 구성에서 다음과 같이 참조해요:

vault-config.json:

{
  "connect": [
    {
      "ca_config": [
        {
          "address": "https://vault:8200",
          "intermediate_pki_path": "dc1/connect-intermediate",
          "root_pki_path": "connect-root",
          "token": "s.VgQvaXl8xGFO1RUxAPbPbsfN",
          "ca_file": "/consul/userconfig/vault-ca/vault.ca"
        }
      ],
      "ca_provider": "vault"
    }
  ]
}

이 예시 구성 파일은 TLS가 활성화된 상태로 배포된 동일한 Kubernetes 클러스터에서 실행되는 Vault 인스턴스를 가리켜요. ca_file은 이전에 생성한 Vault CA용 Kubernetes secret에 기반한 파일 위치를 가리킨다는 점을 유의해요. 해당 secret은 나중에 Consul 클러스터의 Helm 값에서 제공할 거예요.

참고 (NOTE): Kubernetes CA를 사용해 Vault의 인증서를 서명했다면(Standalone Server with TLS에 표시된 것처럼) Vault의 CA로 Kubernetes secret을 만들 필요가 없고 ca_file을 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt로 설정해 CA를 직접 참조할 수 있어요.

다음으로 이 구성 파일로 Kubernetes secret을 생성해요.

$ kubectl create secret generic vault-config --from-file=config=vault-config.json

이 secret과 Vault CA secret을 server.extraVolumes Helm 값을 통해 Consul 서버에 제공할 거예요.

values.yaml:

global:
  name: consul
server:
  extraVolumes:
    - type: secret
      name: vault-config
      load: true
      items:
        - key: config
          path: vault-config.json
    - type: secret
      name: vault-ca
      load: false
connectInject:
  enabled: true

마지막으로 위 구성 파일을 사용해 Helm 차트를 설치해요:

$ helm install consul --values values.yaml hashicorp/consul

CA 제공자가 올바르게 설정되었는지 확인해요:

$ kubectl exec consul-server-0 -- curl --silent http://localhost:8500/v1/connect/ca/configuration\?pretty
{
  "Provider": "vault",
  "Config": {
    "Address": "https://vault:8200",
    "CAFile": "/consul/userconfig/vault-server-tls/vault.ca",
    "IntermediateCertTTL": "8760h",
    "IntermediatePKIPath": "connect-intermediate",
    "LeafCertTTL": "72h",
    "RootPKIPath": "connect-root",
    "Token": "s.VgQvaXl8xGFO1RUxAPbPbsfN"
  },
  "State": null,
  "ForceWithoutCrossSigning": false,
  "CreateIndex": 5,
  "ModifyIndex": 5
}

보조 데이터센터 (Secondary Datacenters)

보조 데이터센터에서 Vault를 서비스 메시 CA로 구성하려면 루트 CA는 동일하지만 각 데이터센터마다 중간(intermediate) CA가 다르도록 해야 해요. 보조 데이터센터의 connect 구성에서 이 구성이 의도된 데이터센터로 접두사가 붙은(예: dc2/connect-intermediate) intermediate_pki_path를 지정할 수 있어요. 각 보조 Kubernetes 클러스터에서 Vault 토큰과 Vault의 CA가 있는 Kubernetes secret을 유사하게 생성해야 해요.

{
  "connect": [
    {
      "ca_config": [
        {
          "address": "https://vault:8200",
          "intermediate_pki_path": "dc2/connect-intermediate",
          "root_pki_path": "connect-root",
          "token": "s.VgQvaXl8xGFO1RUxAPbPbsfN",
          "ca_file": "/consul/userconfig/vault-ca/vault.ca"
        }
      ],
      "ca_provider": "vault"
    }
  ]
}

모든 보조 데이터센터가 기본 데이터센터와 동일한 Vault 인스턴스에 접근해야 한다는 점을 유의해요.

Vault 토큰 수동 교체 (Manually Rotating Vault Tokens)

Consul < 1.8.5를 실행하거나 갱신 가능하지 않은 Vault 토큰을 사용한다면 Vault 토큰이 만료되기 전에 수동으로 갱신하거나 교체해야 해요.

Vault 토큰 교체 (Rotating Vault Token)

Consul 에이전트 구성에 정의된 ca_config와 ca_provider 옵션은 클러스터를 처음 부트스트랩할 때만 사용돼요. 클러스터가 실행된 후에는 consul reload를 실행하거나 서버를 재시작해도 ca_provider 구성의 후속 변경 사항은 무시돼요.

이 키 아래의 설정을 업데이트하려면 Consul의 CA 구성 업데이트 API 또는 consul connect ca set-config 명령을 사용해야 해요.

Vault 토큰 갱신 (Renewing Vault Token)

Vault 토큰을 갱신하려면 vault token renew CLI 명령 또는 API를 사용해요.

더 알아보기 (Learn more)