작업 명세의 connect 블록
작업 명세의 connect 블록 (connect block in the job specification)
| 배치 | job -> group -> service -> **connect** |
|---|---|
connect 블록은 Consul 서비스 메시(이전 Consul Connect)에 대한 다양한 옵션을 구성하는 데 사용해요. connect 블록은 태스크 그룹 수준의 서비스 정의 컨텍스트 내에서만 유효해요.
Nomad와 함께 Consul 서비스 메시를 사용하는 방법에 대한 자세한 내용은 다음 리소스를 참조하세요:
- 소개와 작업에서 Consul 서비스 메시를 구성하는 방법은 Consul 서비스 메시 개요를 참조하세요.
- Consul ACL이 활성화된 상태에서
connect를 사용하는 방법은 Consul 서비스 메시로 Nomad 작업 보안을 참조하세요.
이 페이지의 모든 예제는 Consul과 Nomad가 같은 데이터센터에 있다고 가정해요.
job "countdash" {
datacenters = ["dc1"]
group "api" {
network {
mode = "bridge"
}
service {
name = "count-api"
port = "9001"
connect {
sidecar_service {}
}
}
task "web" {
driver = "docker"
config {
image = "hashicorpdev/counter-api:v3"
}
}
}
}
출처: 문서
본문
매개변수 (Parameters)
connect 서비스를 구성하는 데 사용돼요. connect 블록당 native, sidecar_service, gateway 중 하나만 실현될 수 있어요.
-
native(bool: false)— 서비스를 Consul 서비스 메시 네이티브 애플리케이션을 지원하도록 구성하는 데 사용돼요. -
sidecar_service([sidecar_service](https://developer.hashicorp.com/nomad/docs/job-specification/sidecar_service): nil)— Consul 서비스 메시를 위해 Nomad가 만드는 사이드카 서비스를 구성하는 데 사용돼요. -
sidecar_task([sidecar_task](https://developer.hashicorp.com/nomad/docs/job-specification/sidecar_task):nil)— 사이드카 또는 게이트웨이로 생성된 Envoy 프록시의 태스크 구성을 수정해요. -
gateway([gateway](https://developer.hashicorp.com/nomad/docs/job-specification/gateway):nil)— Consul 서비스 메시를 위해 Nomad가 만드는 게이트웨이 서비스를 구성하는 데 사용돼요.
예제 (Examples)
Consul 서비스 메시 네이티브 사용하기 (Using Consul service mesh native)
다음 예제는 generate라는 태스크로 구현된 Consul 서비스 메시 네이티브 애플리케이션을 위한 최소한의 service 블록이에요. Consul이 원하는 값으로 서비스를 광고하도록 service name과 service port 필드를 포함해야 해요.
service {
name = "uuid-api"
port = "${NOMAD_PORT_api}"
task = "generate"
connect {
native = true
}
}
사이드카 서비스 사용하기 (Using sidecar service)
다음 예제는 기본값이 있는 최소한의 connect 블록으로, Consul 서비스 메시를 통한 수신 연결을 허용하는 Envoy 프록시 사이드카를 시작하기에 충분해요. Consul이 원하는 값으로 서비스를 광고하도록 service name과 service port 필드를 포함해야 해요.
service {
name = "count-api"
port = "9001"
connect {
sidecar_service {}
}
}
다음 예제는 upstreams 지정을 포함해요.
service {
name = "count-api"
port = "9001"
connect {
sidecar_service {
proxy {
upstreams {
destination_name = "count-api"
local_bind_port = 8080
}
}
}
}
}
다음은 완전한 countdash 예제예요. API 서비스와 Connect 업스트림으로 API 서비스에 연결되는 프론트엔드 Dashboard 서비스를 포함해요. 실행되면 대시보드는 localhost:9002에서 접근할 수 있어요.
job "countdash" {
datacenters = ["dc1"]
group "api" {
network {
mode = "bridge"
}
service {
name = "count-api"
port = "9001"
connect {
sidecar_service {}
}
check {
expose = true
type = "http"
name = "api-health"
path = "/health"
interval = "10s"
timeout = "3s"
}
}
task "web" {
driver = "docker"
config {
image = "hashicorpdev/counter-api:v3"
}
}
}
group "dashboard" {
network {
mode = "bridge"
port "http" {
static = 9002
to = 9002
}
}
service {
name = "count-dashboard"
port = "9002"
connect {
sidecar_service {
proxy {
upstreams {
destination_name = "count-api"
local_bind_port = 8080
}
}
}
}
}
task "dashboard" {
driver = "docker"
env {
COUNTING_SERVICE_URL = "http://${NOMAD_UPSTREAM_ADDR_count_api}"
}
config {
image = "hashicorpdev/counter-dashboard:v3"
}
}
}
}
게이트웨이 사용하기 (Using a gateway)
다음은 Consul 서비스 메시 인그레스 게이트웨이를 만들고 사용하기 위한 service 블록 예제예요. 게이트웨이 서비스 정의와 게이트웨이가 앞에 있는 API 서비스를 포함해요. 실행되면 먼저 게이트웨이 Consul DNS 주소를 curl로 조회해 게이트웨이로 API 서비스에 도달할 수 있어요.
curl $(dig +short @127.0.0.1 -p 8600 uuid-api.ingress.dc1.consul. ANY):8080
job "ingress-demo" {
datacenters = ["dc1"]
group "ingress-group" {
network {
mode = "bridge"
port "inbound" {
static = 8080
to = 8080
}
}
service {
name = "my-ingress-service"
port = "8080"
connect {
gateway {
ingress {
listener {
port = 8080
protocol = "tcp"
service {
name = "uuid-api"
}
}
}
}
}
}
}
}