Consul 서비스 메시의 Kubernetes 서비스 업스트림

Consul 서비스 메시의 Kubernetes 서비스 업스트림 (Kubernetes Service Upstreams in Consul Service Mesh)

Kubernetes 서비스 업스트림을 주소 지정하는 방법은 Consul의 Transparent Proxy 활성화 여부에 따라 달라져요. 명시적 선언 또는 Transparent Proxy를 통한 직접 주소 지정 방식을 알아봐요.

출처: 문서

본문

소개 (Introduction)

서비스 업스트림을 주소 지정하는 방법은 Consul의 Transparent Proxy 활성화 여부에 따라 달라져요.

Transparent Proxy가 활성화되지 않았을 때는 K8s 배포에 주석(annotation)을 통한 명시적 선언을 사용해야 해요. 이 데이터 요소는 spec.template.metadata.annotations 아래에 배치해야 해요. 다음은 payment-api 업스트림에 대한 주석 예시예요.

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    metadata:
      annotations:
        consul.hashicorp.com/connect-inject: 'true'
        consul.hashicorp.com/connect-service-upstreams: 'payment-api:9091'
[...]

Transparent Proxy가 활성화되었을 때는 배포를 미리 구성하지 않고 워크로드에서 서비스를 직접 주소 지정할 수 있어요. 이는 kube-dns나 CoreDNS 같은 K8s DNS 서비스, 또는 Consul DNS와 함께 Consul 가상 IP를 사용해 수행해요.

두 경우 모두 대상 호스트네임은 업스트림 서비스에 도달하는 방법에 따라 구성돼요. 예를 들어 업스트림 서비스에 도달하기 위해 관리 파티션(admin partitions)이나 클러스터 피어링(cluster peerings)을 통과하는 경우가 그렇죠.

Transparent Proxy가 활성화되지 않음 (Transparent proxy not enabled)

다음은 payment-api 서비스에 대한 주석 예시예요.

관리 파티션 내 (Within an admin partition)

  • 동일 네임스페이스, 동일 클러스터
K8s 배포의 명시적 선언 애플리케이션의 연결 대상
consul.hashicorp.com/connect-service-upstreams: 'payment-api:9091' localhost:9091
  • 네임스페이스 간, 동일 클러스터
K8s 배포의 명시적 선언 애플리케이션의 연결 대상
consul.hashicorp.com/connect-service-upstreams: 'payment-api.<consul-namespace>:9091' localhost:9091
  • 동일 네임스페이스, 클러스터 피어링 간
K8s 배포의 명시적 선언 애플리케이션의 연결 대상
consul.hashicorp.com/connect-service-upstreams: 'payment-api:9091' localhost:9091

관리 파티션 간 (Across admin partitions)

K8s 배포의 명시적 선언 애플리케이션의 연결 대상
consul.hashicorp.com/connect-service-upstreams: 'payment-api.<consul-namespace>.<consul-adminpartition>:9091' localhost:9091

Consul WAN 페더레이션을 통한 K8s 클러스터 간 (Across K8s clusters over Consul WAN Federation)

  • 동일 네임스페이스
K8s 배포의 명시적 선언 애플리케이션의 연결 대상
consul.hashicorp.com/connect-service-upstreams: 'payment-api:9091:<consul-datacenter>' localhost:9091
  • 네임스페이스 간
K8s 배포의 명시적 선언 애플리케이션의 연결 대상
consul.hashicorp.com/connect-service-upstreams: 'payment-api.<consul-namespace>:9091:<consul-datacenter>' localhost:9091

Consul 클러스터 피어링을 통한 K8s 클러스터 간 (Across K8s clusters over Consul Cluster Peering)

K8s 배포의 명시적 선언 애플리케이션의 연결 대상
consul.hashicorp.com/connect-service-upstreams: 'payment-api.svc.<consul-namespace>.ns.<consul-datacenter>-<consul-adminpartition>.peer:9091' localhost:9091

Transparent Proxy 활성화 (Transparent proxy enabled)

Transparent Proxy가 활성화되면 배포를 미리 구성하지 않고 워크로드에서 서비스를 직접 주소 지정할 수 있어요. K8s DNS 솔루션인 kube-dns 또는 CoreDNS 중에서 선택할 때 후자(CoreDNS)를 권장해요.

관리 파티션 내 (Within an admin partition)

  • 동일 네임스페이스, 동일 클러스터
K8S DNS Consul DNS
payment-api.<consul-namespace>.svc.cluster.local payment-api.virtual.consul
payment-api.virtual.<consul-namespace>.ns.<consul-datacenter>.dc.consul
  • 네임스페이스 간, 동일 클러스터
K8S DNS Consul DNS
payment-api.<consul-namespace>.svc.cluster.local payment-api.virtual.<consul-namespace>.ns.<consul-datacenter>.dc.consul
  • 동일 네임스페이스, 클러스터 피어링 간
K8S DNS Consul DNS
지원되지 않음 (Not supported) payment-api.virtual.consul
payment-api.virtual.<consul-namespace>.ns.<consul-datacenter>.dc.consul

관리 파티션 간 (Across admin partitions)

K8S DNS Consul DNS
지원되지 않음 (Not supported) payment-api.virtual.<consul-namespace>.ns.<consul-adminpartition>.ap.<consul-datacenter>.dc.consul

Consul WAN 페더레이션을 통한 K8s 클러스터 간 (Across K8s clusters over Consul WAN Federation)

WAN 페더레이션을 통한 Kubernetes 클러스터 간에는 배포를 미리 구성하지 않고 서비스를 직접 주소 지정하는 것이 지원되지 않아요.

Consul 클러스터 피어링을 통한 K8s 클러스터 간 (Across K8s clusters over Consul Cluster Peering)

  • 동일 네임스페이스
K8S DNS Consul DNS
지원되지 않음 (Not supported) payment-api.virtual.<consul-adminpartition>.ap.<consul-clusterpeer>.peer.consul
  • 네임스페이스 간
K8S DNS Consul DNS
지원되지 않음 (Not supported) payment-api.virtual.<consul-namespace>.ns.<consul-adminpartition>.ap.<consul-clusterpeer>.peer.consul

더 알아보기 (Learn more)