작업 명세의 consul 블록
작업 명세의 consul 블록 (consul block in the job specification)
| 배치 | job -> group -> **consul** |
| | job -> group -> task -> **consul** |
| | |
| | |
jobspec consul 블록은 서비스 디스커버리에 Consul을 사용하는 작업이나 Consul 토큰이 필요한 태스크에서 Consul 구성 옵션을 지정해요.
워크로드는 Consul에 대해 두 가지 서로 다른 신원(identity)을 가질 수 있어요. 태스크 신원은 template 블록이나 애플리케이션에 Consul 토큰을 제공하는 데 사용돼요. 서비스 신원은 Consul 제공자를 사용하는 service 블록과 connect 블록에 사용돼요.
jobspec consul 블록은 Consul에 대한 서비스 신원을 생성하지 않아요. Nomad는 서비스의 provider 필드를 사용해 서비스에 대한 Consul 신원을 생성할지 여부를 결정해요.
출처: 문서
본문
구성 (Configuration)
consul jobspec 블록은 Nomad에 그룹 또는 태스크 서비스를 등록할 Consul 클러스터와 네임스페이스를, 그리고 클라이언트가 consul.task_identity로 구성된 경우 태스크 신원 토큰을 생성할 클러스터와 네임스페이스를 알려줘요. 또한 서비스 메시 게이트웨이 워크로드에 사용할 admin 파티션을 제공해요.
Nomad 서비스에 사용할 클러스터는 service.cluster 매개변수로 재정의할 수 있고, 태스크 신원은 identity{} 블록으로 태스크를 직접 구성해 재정의할 수 있어요. 아래에 예제가 제공돼요.
Note: jobspec
consul블록은 Nomad 에이전트 구성 파일의 Consul 구성과는 별개예요. 에이전트 구성 파일은 Nomad 클라이언트가 Consul에 연결하는 방법을 지정해요. Consul 통합에 대한 자세한 내용은 다음을 참조하세요:
매개변수 (Parameters)
-
cluster(string: "default")Enterprise — 사용할 Consul 클러스터를 지정해요. Nomad 클라이언트는 에이전트 구성에서 같은
consul.name으로 구성된 클러스터에서 Consul 토큰을 검색해요. -
namespace(string: "")Enterprise — 그룹 내 그룹 및 태스크 수준 서비스가 등록되는 Consul 네임스페이스.
template을 사용해 지정된 Consul 네임스페이스에서 Consul KV를 읽는 데 사용돼요.namespace를 지정하면job run의-consul-namespace명령줄 인수보다 우선해요. -
partition(string: "")Enterprise — 이 필드가 설정되면 지정된 Consul admin 파티션에 Consul Enterprise 에이전트가 있는 Nomad 클라이언트에 할당이 배치되도록 그룹 또는 태스크에 제약 조건이 추가돼요. 이 필드를 사용하려면 다음이 필요해요:
- Consul Enterprise. Consul admin 파티션은 Enterprise 전용 기능이기 때문이에요.
- 워크로드 신원 통합.
partition필드는 레거시 Consul 토큰에서 작동하지 않아요. Nomad의 워크로드 신원을 Consul 인증과 통합하는 방법은 Nomad 워크로드 신원을 참조하세요.
Consul 토큰 (Consul token)
Nomad는 서버 에이전트 구성의 consul.task_identity 블록 값을 사용해 JSON Web Token(JWT) 태스크 신원을 생성해요. Nomad는 이 JWT 신원을 사용해 Consul에 대한 토큰을 만들어요.
- 그룹 수준에서
consul블록을 선언하면 Nomad가 각 태스크에 대한 Consul 토큰을 생성해요. - 태스크 수준에서
consul블록을 선언하면 Nomad가 해당 특정 태스크에 대해서만 Consul 토큰을 생성해요.
Nomad 클라이언트는 secrets/consul_token에 시크릿 디렉토리로 써서, 그리고 태스크에 CONSUL_TOKEN 환경 변수를 주입해 Consul 토큰을 태스크에 사용할 수 있게 해요.
Nomad 클러스터를 Consul 네임스페이스를 사용하도록 구성했다면, Nomad는 CONSUL_TOKEN이 설정될 때마다 CONSUL_NAMESPACE 환경 변수를 주입해요.
template 블록에서도 Consul 토큰에 접근할 수 있어요. 자세한 내용은 템플릿용 Consul 토큰 예제를 참조하세요.
예제 (Examples)
다음 예제는 consul 블록 또는 기타 관련 블록만 보여줘요. consul 블록은 위에 나열된 배치에서만 유효하다는 것을 기억하세요.
템플릿용 Consul 토큰 (Consul token for templates)
Nomad는 템플릿이 Consul에 요청하는지 알아보기 위해 템플릿을 해석하지 않으므로, 다음 중 하나를 구성해야 해요:
- jobspec의 Consul 신원을 지정하는
identity블록. jobspecidentity블록을 사용하는 방법은 Consul용 워크로드 신원 섹션을 참조하세요. - 템플릿이 사용할 수 있는 Consul 토큰을 만들도록 Nomad에 지시하는
consul블록. 이를 사용하려면 Nomad 클라이언트가consul.task_identity블록으로 구성되어야 해요.
이 예제는 태스크의 구성된 워크로드 신원을 사용해 Consul 토큰을 얻도록 Nomad 클라이언트에 지시해요. 토큰은 표준 환경 변수 CONSUL_TOKEN으로 태스크에서 사용할 수 있고 secrets/consul_token에 디스크로 기록돼요. template 블록은 같은 Consul 토큰을 사용해요. identity.name 값이 "consul_default"로 설정되면, 이 신원을 기본 Consul 클러스터에 요청할 때 사용하도록 Nomad 클라이언트에 지시한다는 점에 유의하세요.
job "example" {
group "app" {
task "web" {
identity {
name = "consul_default"
...
}
template {
data = "APP_NAME={{key \"app/name\"}}"
destination = "local/config.txt"
}
}
}
}
이 예제는 서버의 consul.task_identity 매개변수 구성이 지정한 기본 신원을 사용하도록 Nomad에 지시해요.
job "example" {
group "app" {
task "web" {
consul {}
template {
data = "APP_NAME={{key \"app/name\"}}"
destination = "local/config.txt"
}
}
}
}
Consul 네임스페이스 (Consul namespace)
Enterprise
이 예제는 그룹 내 서로 다른 태스크에 대해 특정 Consul 네임스페이스나 Consul 클러스터를 지정하는 방법을 보여줘요.
web 태스크의 template 블록은 기본 Consul 클러스터를 사용하고, engineering/frontend Consul 네임스페이스에 접근할 수 있는 토큰을 얻어요. app 태스크의 template 블록은 prod-apps라는 Consul 클러스터를 사용하고, engineering/apps Consul 네임스페이스에 접근할 수 있는 토큰을 얻어요.
job "docs" {
group "example" {
task "web" {
consul {
namespace = "engineering/frontend"
}
template {
data = "FRONTEND_NAME={{key \"fe/name\"}}"
destination = "local/config.txt"
}
}
task "app" {
consul {
namespace = "engineering/apps"
cluster = "prod-apps"
}
template {
data = "APP_NAME={{key \"app/name\"}}"
destination = "local/config.txt"
}
}
}
}
Consul admin 파티션 (Consul admin partition)
Enterprise
이 예제는 그룹 내 서로 다른 태스크에 대한 Consul admin 파티션을 구성하는 방법을 보여줘요. Consul 클라이언트 에이전트는 에이전트 구성에서 admin 파티션을 별도로 지정해야 해요. 자세한 내용은 Consul 문서의 에이전트 구성 참조를 참조하세요.
다음 예제에서 web과 app 태스크는 기본 Consul 클러스터를 사용하고 Consul의 prod admin 파티션에 접근할 수 있는 토큰을 얻어요. 태스크가 같은 Allocation에 함께 배치되므로 Consul 구성은 group 수준에서 이루어져요. 태스크를 별도의 consul 블록으로 구성한다면 두 블록의 partition 필드가 같아야 해요.
job "docs" {
group "example" {
consul {
cluster = "default"
namespace = "default"
partition = "prod"
}
task "web" {
template {
data = "FRONTEND_NAME={{key \"fe/name\"}}"
destination = "local/config.txt"
}
}
task "app" {
template {
data = "APP_NAME={{key \"app/name\"}}"
destination = "local/config.txt"
}
}
}
}