Kubernetes에 Consul Dataplane 배포하기

Kubernetes에 Consul Dataplane 배포하기

이 문서에서는 Kubernetes 배포에서 Consul Dataplane을 설정하는 방법과, 기존 Kubernetes 배포를 Consul 클라이언트 에이전트 대신 Consul Dataplane을 사용하도록 갱신하는 과정을 설명해 드려요.

출처: 문서

본문

요구 사항

Consul Dataplane에는 다음과 같은 요구 사항이 있어요.

  • Consul 서버 클러스터 버전 v1.14.0 이상
  • Consul K8s v1.0.0 이상
  • NET_BIND_SERVICE 컨테이너 능력(capability). 자세한 내용은 Kubernetes 문서의 컨테이너에 능력 설정을 참고하세요.
  • Consul Dataplane은 Windows에서 지원되지 않습니다.

설치

기본적으로 Helm 차트나 consul-k8s 도구로 Consul을 설치하면 Consul Dataplane이 자동으로 설치돼요. client.enabled 스탠자를 사용해 Consul 클라이언트 파드를 설치하도록 선택할 수도 있습니다.

Helm 차트의 global.imageConsulDataplane 스탠자로 Consul Dataplane의 특정 버전을 정의할 수 있어요.

global:
  [
  ...
  ]
  imageConsulDataplane: 'hashicorp/consul-dataplane:2.0.3'
  [
  ...
  ]

Consul 파티션 간 내보내기 서비스

ACL이 활성화된 경우, * 와일드카드로 네임스페이스 파티션을 정의할 때 데이터플레인을 사용하는 파티션 간 내보내기 서비스에서 오류가 발생할 수 있어요. Consul 데이터플레인은 builtin/service 정책이 연결된 토큰을 사용하지만, 이 정책은 모든 네임스페이스에 대한 접근을 포함하지 않습니다.

Consul 데이터플레인에 연결된 서비스 토큰에 다음 정책을 추가하여 모든 네임스페이스에 걸쳐 내보내기 서비스에 대한 Consul 접근을 부여해요.

partition "default" {
  namespace "default" {
    query_prefix "" {
      policy = "read"
    }
  }
}

partition_prefix "" {
  namespace_prefix "" {
    node_prefix "" {
      policy = "read"
    }

    service_prefix "" {
      policy = "read"
    }
  }
}

Consul 클라이언트 에이전트를 Consul Dataplane으로 업그레이드하기

Consul 데이터플레인을 사용하는 Consul 버전으로 업그레이드하기 전에, 배포에서 클라이언트 에이전트가 제거되도록 Helm 차트를 편집해야 해요.

이전 버전에서 Kubernetes의 Consul은 배포에 클라이언트 에이전트를 사용했어요. v1.14.0부터 Consul은 Kubernetes 배포에서 클라이언트 에이전트 대신 Consul Dataplane을 사용합니다.

클라이언트 에이전트를 사용하는 버전에서 데이터플레인을 사용하는 버전으로 Consul을 업그레이드한다면, 중단 없이 배포를 안전하게 업그레이드하기 위해 다음 단계를 완료하세요.

ACL이 활성화되어 있다면 먼저 consul-k8s 0.49.8 이상으로 업그레이드해야 해요. 이 버전들은 ACL이 활성화된 경우 무중단 업그레이드에 필요한 connectInject.prepareDataplanesUpgrade 설정을 노출합니다. connectInject.prepareDataplanesUpgrade를 true로 설정한 다음 0.49.8 이상(0.49.x 시리즈에서 최신)으로 업그레이드를 수행해요.

connectInject:
  prepareDataplanesUpgrade: true

Consul 데이터플레인은 기본적으로 Consul 클라이언트를 비활성화하지만, 업그레이드 중에는 Consul 클라이언트가 계속 실행되도록 해야 해요. Helm 차트 구성을 편집하고 client.enabled 필드를 true로 설정하고, client.updateStrategy 필드에서 업그레이드 과정 중 Consul이 취할 동작을 지정하세요.

client:
  enabled: true
  updateStrategy: |
    type: OnDelete

Kubernetes 배포에서 서버를 업그레이드하는 권장 절차를 따라 새 버전의 Consul에 맞게 Helm 값을 업그레이드해요. < 1.14.x 버전에서 서버 업그레이드를 수행하는 동안 모든 Consul 서버가 >=1.14.x 버전이 될 때까지 최신 consul-k8s 구성 요소가 CrashLoopBackoff 상태가 될 수 있어요. CrashLoopBackoff 상태의 구성 요소는 이전 버전의 구성 요소가 계속 작동하므로 클러스터에 부정적인 영향을 주지 않습니다. 모든 서버가 완전히 업그레이드되면 최신 consul-k8s 구성 요소가 CrashLoopBackoff에서 자동으로 복구되고 이전 버전 구성 요소는 종료됩니다.

kubectl rollout restart를 실행해 서비스 메시 애플리케이션을 재시작해요. 서비스 메시 애플리케이션을 재시작하면 Kubernetes가 데이터플레인용 웹훅으로 다시 주입합니다.

서비스 메시의 모든 게이트웨이를 재시작하세요.

이제 모든 서비스와 게이트웨이가 Consul 데이터플레인을 사용하므로, Helm 차트에서 client 스탠자를 삭제하거나 client.enabled를 false로 설정하고 consul-k8s 또는 Helm 업그레이드를 실행하여 클라이언트 에이전트를 비활성화해요.

ACL이 활성화된 경우, 오래된 ACL 토큰이 업그레이드의 결과로 남을 수 있어요. Consul 환경을 정돈하기 위해 토큰을 수동으로 삭제할 수 있습니다. 오래된 connect-injector 토큰은 token created via login: {"component":"connect-injector"}라는 설명을 가져요. pod가 키로 포함된 설명(예: token created via login: {"component":"connect-injector","pod":"default/consul-connect-injector-576b65747c-9547x"})을 가진 토큰은 삭제하지 마세요. 데이터플레인 활성화 connect inject 파드는 이 토큰들을 사용합니다. 토큰의 생성 날짜를 검토하여 업그레이드 전에 생성된 인젝터 토큰만 삭제할 수도 있지만, 여전히 사용 중인지 고려하지 않고 모든 오래된 토큰을 삭제하지는 마세요. 서버 토큰 같은 일부 토큰은 여전히 필요합니다.

더 알아보기 (Learn more)