기존 클러스터에서 TLS 구성

기존 클러스터에서 TLS 구성 (Configure TLS on an existing cluster on Kubernetes)

Consul Helm 버전 0.16.0부터 차트는 클러스터 내 통신을 위한 TLS를 지원해요. 이미 Kubernetes에 Consul 클러스터를 배포했다면 애플리케이션의 다운타임을 최소화하는 방식으로 TLS를 구성하고 싶을 수 있어요. Consul은 이미 다운타임 없이 기존 클러스터에서 TLS를 롤아웃하는 것을 지원해요.

출처: 문서

본문

Consul Helm 버전 0.16.0부터 차트는 클러스터 내 통신을 위한 TLS를 지원합니다. 이미 Kubernetes에 Consul 클러스터를 배포했다면 애플리케이션의 다운타임을 최소화하는 방식으로 TLS를 구성하고 싶을 수 있습니다. Consul은 이미 다운타임 없이 기존 클러스터에서 TLS를 롤아웃하는 것을 지원합니다. 그러나 Kubernetes 사용 사례에 따라 업그레이드 절차가 다를 수 있습니다.

Consul 서비스 메시 없이 점진적 TLS 롤아웃 (Gradual TLS Rollout without Consul Service Mesh)

서비스 메시를 사용하지 않는다면 이 프로세스를 따르세요.

  1. 다음 구성으로 Helm 업그레이드를 실행합니다:
global:
  tls:
    enabled: true
    # This configuration sets `verify_outgoing`, `verify_server_hostname`,
    # and `verify_incoming` to `false` on servers and clients,
    # which allows TLS-disabled nodes to join the cluster.
    verify: false
server:
  updatePartition: <number_of_server_replicas>

이 업그레이드는 consul-k8s 구성 요소의 롤링 업데이트를 트리거합니다.

  1. Upgrade Consul Servers에 설명된 대로 서버의 롤링 업그레이드를 수행합니다.
  2. global.tls.verify를 true로 설정하여 TLS 검증을 켜고 1단계와 2단계를 반복합니다.

Consul 서비스 메시가 있는 점진적 TLS 롤아웃 (Gradual TLS Rollout with Consul Service Mesh)

사이드카 Envoy 프록시는 서비스 검색을 위해 Consul 클라이언트 에이전트와 정기적으로 통신해야 하므로, TLS 지원 프록시를 애플리케이션 포드에 다시 주입하지 않고는 클라이언트에서 TLS를 활성화할 수 없습니다. 최소 다운타임으로 TLS 롤아웃을 수행하려면 새 Kubernetes 노드 풀을 추가하고 애플리케이션을 그곳으로 마이그레이션하는 것을 권장합니다.

  1. 동일한 새 노드 풀을 추가합니다.
  2. kubectl cordon을 실행하여 이전 풀의 모든 노드를 코든합니다. 이 명령은 Kubernetes가 해당 노드에 새 워크로드를 스케줄링하지 않고 대신 새 TLS 지원 노드에 스케줄링하도록 보장합니다.
  3. 업그레이드를 위해 다음 Helm 구성 파일을 만듭니다:
global:
  tls:
    enabled: true
    # This configuration sets `verify_outgoing`, `verify_server_hostname`,
    # and `verify_incoming` to `false` on servers and clients,
    # which allows TLS-disabled nodes to join the cluster.
    verify: false
server:
  updatePartition: <number_of_server_replicas>
client:
  updateStrategy: |
    type: OnDelete

이 구성에서 Upgrade Consul Servers에 설명된 대로 server.updatePartition을 서버 복제본 수로 설정하고 있습니다.

  1. 위 구성 파일로 helm upgrade를 실행합니다.
  2. 이 시점에서 모든 구성 요소(예: Consul 서비스 메시 웹훅 및 sync catalog)가 새 노드 풀에서 실행되어야 합니다.
  3. 메시 지원 애플리케이션을 모두 재배포합니다. 재배포를 트리거하는 한 가지 방법은 이전 풀의 노드에서 kubectl drain을 실행하는 것입니다. 이제 서비스 메시 웹훅이 TLS를 인식하므로 사이드카 프록시에 TLS 구성을 추가합니다. 또한 Kubernetes는 이러한 애플리케이션을 새 노드 풀에 스케줄링해야 합니다.
  4. Upgrade Consul Servers에 설명된 서버의 롤링 업그레이드를 수행합니다.
  5. 모든 것이 정상이면 이전 노드 풀을 삭제합니다.
  6. 마지막으로 Helm 구성 파일에서 global.tls.verify를 true로 설정하고 client.updateStrategy 속성을 제거한 다음 서버의 롤링 업그레이드를 수행합니다.

참고 (Note): 노드 풀을 완전히 복제하지 않고도 이 업그레이드를 수행할 수 있습니다. 기존 노드 풀 내에서 Kubernetes 노드의 하위 집합을 드레인하고 이를 "새 노드 풀"로 취급할 수 있습니다. 그런 다음 위 지침을 따르세요. 노드 풀의 나머지 노드에 대해 이 프로세스를 반복합니다.

더 알아보기 (Learn more)