Consul 서비스 정의

Consul 서비스 정의 (Service fundamentals)

Consul 에이전트가 서비스를 Consul 카탈로그에 등록하려면 서비스 정의가 필요하다는 것을 설명하는 문서예요. 또한 여러 서비스의 공통 설정을 정의하기 위한 service defaults도 구성할 수 있어요.

출처: 문서

본문

Consul 에이전트는 서비스를 Consul 카탈로그에 등록하려면 서비스 정의가 필요해요. 또한 여러 서비스의 공통 설정을 정의하기 위해 service defaults를 구성할 수도 있어요.

서비스 정의 (Service definitions)

서비스 정의는 네트워크의 다른 서비스가 그것을 어떻게 발견하는지 등 서비스의 다양한 측면을 지정하는 매개변수 집합을 포함해요. 서비스 정의에는 헬스 체크 구성도 포함될 수 있어요. 서비스 정의 파일의 service 블록에 매개변수를 지정해 개별 서비스와 헬스 체크를 구성해요. 서비스 정의에 대한 정보는 서비스 정의를 참고하세요. 헬스 체크의 구성 세부 사항은 헬스 체크 구성 참조를 참고하세요.

Consul은 JSON과 HCL로 작성된 서비스 정의를 지원해요.

서비스를 등록하려면 서비스 정의를 Consul 에이전트에 제공해요. 서비스 등록에 대한 정보는 서비스 및 헬스 체크 등록을 참고하세요.

ACL

Consul 네임스페이스와 ACL 시스템이 모두 활성화된 경우 서비스를 특정 네임스페이스에 등록할 수 있어요. 하지만 다음을 유의해야 해요:

  1. 서비스 정의로 등록된 서비스는 token 필드에 지정된 ACL 토큰과 연관된 네임스페이스를 상속하지 않아요.
  2. 서비스 정의에 네임스페이스 매개변수와 해당 네임스페이스에 대한 권한이 있는 ACL 토큰을 모두 명시적으로 포함해야 해요. 이렇게 하면 네임스페이스 내 서비스 배치를 정밀하게 제어하고 적절한 접근 제어를 유지할 수 있어요.

예시 서비스 정의 (Example service definition)

다음 예시는 가능한 모든 매개변수를 포함하지만, 기본적으로 최상위 service 매개변수와 그것의 name 매개변수만 필수예요.

HCL

service {
  name = "redis"
  id   = "redis"
  port = 80
  tags = ["primary"]
 
  meta = {
    custom_meta_key = "custom_meta_value"
  }
 
  tagged_addresses = {
    lan = {
      address = "192.168.0.55"
      port    = 8000
    }
 
    wan = {
      address = "198.18.0.23"
      port    = 80
    }
  }
 
  port                = 8000
  socket_path         = "/tmp/redis.sock"
  enable_tag_override = false
 
  checks = [
    {
      args     = ["/usr/local/bin/check_redis.py"]
      interval = "10s"
    }
  ]
 
  kind              = "connect-proxy"
  proxy_destination = "redis"
 
  proxy = {
    destination_service_name  = "redis"
    destination_service_id    = "redis1"
    local_service_address     = "127.0.0.1"
    local_service_port        = 9090
    local_service_socket_path = "/tmp/redis.sock"
    mode                      = "transparent"
 
    transparent_proxy {
      outbound_listener_port = 22500
    }
 
    mesh_gateway = {
      mode = "local"
    }
 
    expose = {
      checks = true
 
      paths = [
        {
          path            = "/healthz"
          local_path_port = 8080
          listener_port   = 21500
          protocol        = "http2"
        }
      ]
    }
  }
 
  connect = {
    native = false
  }
 
  weights = {
    passing = 5
    warning = 1
  }
 
  token     = "233b604b-b92e-48c8-a253-5f11514e4b50"
  namespace = "foo"
}

JSON

{
  "service": {
    "id": "redis",
    "name": "redis",
    "tags": ["primary"],
    "address": "",
    "meta": {
      "meta": "for my service"
    },
    "tagged_addresses": {
      "lan": {
        "address": "192.168.0.55",
        "port": 8000
      },
      "wan": {
        "address": "198.18.0.23",
        "port": 80
      }
    },
    "port": 8000,
    "socket_path": "/tmp/redis.sock",
    "enable_tag_override": false,
    "checks": [
      {
        "args": ["/usr/local/bin/check_redis.py"],
        "interval": "10s"
      }
    ],
    "kind": "connect-proxy",
    "proxy_destination": "redis", // Deprecated
    "proxy": {
      "destination_service_name": "redis",
      "destination_service_id": "redis1",
      "local_service_address": "127.0.0.1",
      "local_service_port": 9090,
      "local_service_socket_path": "/tmp/redis.sock",
      "mode": "transparent",
      "transparent_proxy": {
        "outbound_listener_port": 22500
      },
      "config": {},
      "upstreams": [],
      "mesh_gateway": {
        "mode": "local"
      },
      "expose": {
        "checks": true,
        "paths": [
          {
            "path": "/healthz",
            "local_path_port": 8080,
            "listener_port": 21500,
            "protocol": "http2"
          }
       ]
      }
    },
    "connect": {
      "native": false,
      "sidecar_service": {},
      "proxy": {  // Deprecated
        "command": [],
        "config": {}
      }
    },
    "weights": {
      "passing": 5,
      "warning": 1
    },
    "token": "233b604b-b92e-48c8-a253-5f11514e4b50",
    "namespace": "foo"
  }
}

다음 단계 (Next steps)

Consul 구성 항목에 대해 알아보세요. 구성 항목을 사용해 서비스 트래픽을 관리하고 서비스와 그 사이드카 프록시에 대한 전역 기본값을 구성할 수 있어요.

더 알아보기 (Learn more)