멀티포트 서비스

멀티포트 서비스

Enterprise 이 기능은 Consul Enterprise가 필요해요. 추가 정보는 Enterprise 기능 매트릭스를 참고하세요.

이 문서에서는 Consul 서비스 메시에서 여러 포트를 사용하는 서비스를 구성하고 배포하는 방법을 설명해 드려요.

Consul 서비스 메시에서는 서비스가 여러 포트를 사용하도록 구성할 수 있어요. 이 구성 덕분에 Consul의 서비스 디스커버리와 트래픽 관리 기능을 그대로 누리면서도 동일한 서비스를 통해 다양한 유형의 트래픽을 실행할 수 있습니다. 예를 들어 웹 애플리케이션은 HTTP 트래픽용 포트 하나와 gRPC 트래픽용 포트 하나를 가질 수 있어요. Consul 서비스 메시를 사용하면 보안 통신, 트래픽 라우팅, 관측성 같은 서비스 메시 기능의 이점을 활용하면서도 서비스가 여러 포트를 사용하도록 구성할 수 있습니다.

출처: 문서

본문

멀티포트 서비스 구성하기

서비스 등록에서 포트를 지정하여 Consul 서비스 메시에 멀티포트 서비스를 구성해요. 각 포트는 고유한 이름(name), 포트 번호(port), 그리고 기본 포트(default) 여부를 가져야 합니다.

이 예시는 HTTP와 gRPC 포트를 모두 정의한 웹 애플리케이션을 HCL과 JSON 형식으로 보여줘요.

multiport-service.hcl

service {
  name = "api"
  id   = "api-1"
  ports = [
    {
      name = "http"
      port = 8080
      default = true
    },
    {
      name = "grpc"
      port = 9090
    }
  ]
}

multiport-service.json

{
  "name": "api",
  "id": "api-1",
  "ports": [
    {
      "name": "http",
      "port": 8080,
      "default": true
    },
    {
      "name": "grpc",
      "port": 9090
    }
  ]
}

멀티포트 서비스 주소 지정하기

논 트랜스패런트 프록시

논 트랜스패런트(non-transparent) 프록시 모드에서 다운스트림 서비스는 다음 매개변수를 정의하여 업스트림을 명시적으로 구성해요.

  • 서비스 destination_name
  • local_bind_port
  • 멀티포트 사용 사례에 특화된 destination_port

이 구성 덕분에 다운스트림 서비스는 업스트림 서비스의 어느 포트에 연결할지 지정할 수 있어요. 프록시는 그에 따라 트래픽 라우팅을 처리합니다. 자세한 내용은 업스트림 구성 참조 문서를 참고하세요.

이 예제 구성은 멀티포트 업스트림 서비스를 가진 논 트랜스패런트 프록시 서비스용이며 다음을 보여줘요.

  • localhost:9191에 연결하는 web 서비스는 단일 포트 db:9191 서비스로 재라우팅됩니다.
  • localhost:9192에 연결하는 web 서비스는 멀티포트 대상 api:8080으로 재라우팅됩니다.
  • localhost:9193에 연결하는 web 서비스는 멀티포트 대상 api:9090으로 재라우팅됩니다.
service {
  name = "web"
  port = 8080
  connect {
    sidecar_service {
      proxy {
        upstreams = [
          {
            destination_name = "db"
            local_bind_port = 9191
          },
          {
            destination_name = "api"
            destination_port = "http"
            local_bind_port = 9192
          },
          {
            destination_name = "api"
            destination_port = "grpc"
            local_bind_port = 9193
          }
        ]
        config {
          handshake_timeout_ms = 1000
        }
      }
    }
  }
}
{
  "name": "web",
  "port": 8080,
  "connect": {
    "sidecar_service": {
      "proxy": {
        "upstreams": [
          {
            "destination_name": "db",
            "local_bind_port": 9191
          },
          {
            "destination_name": "api",
            "destination_port": "http",
            "local_bind_port": 9192
          },
          {
            "destination_name": "api",
            "destination_port": "grpc",
            "local_bind_port": 9193
          }
        ],
        "config": {
          "handshake_timeout_ms": 1000
        }
      }
    }
  }
}

트랜스패런트 프록시

트랜스패런트 프록시 모드에서 Consul은 가상 DNS를 사용해 구성에서 포트를 지정하지 않고도 업스트림 서비스의 올바른 포트를 해석해요. Consul은 서비스 이름과 포트 이름을 기반으로 <port-name>.<service-name>.virtual.consul이라는 명명 규칙을 따라 가상 DNS 항목을 생성합니다. Consul의 내부 DNS는 해당 특정 서비스-포트 조합에 고유한 가상 IP(VIP)를 반환해요. 예를 들어 이름이 api이고 http, grpc라는 두 포트가 있는 서비스가 있다면 가상 DNS 항목은 http.api.virtual.consul과 grpc.api.virtual.consul이 됩니다.

Consul 서비스의 멀티포트 기능

다음 기능은 Consul Multiport를 부분적으로 지원해요.

  • 메시 게이트웨이
  • 프록시 및 서비스 기본값
  • Consul DNS

WAN 페더레이션에서 멀티포트는 지원되지 않는다는 점을 유의하세요. 어떤 서비스 메시 기능이 멀티포트 서비스에 대해 일반적으로 제공(GA)되는지, 계획되었는지, 또는 지원되지 않는지에 대한 완전한 구분은 Multiport 기능 지원 문서를 참고하세요.

다음 단계

Consul 서비스 메시의 멀티포트 서비스는 Consul의 서비스 디스커버리와 트래픽 관리 기능을 누리면서도 동일한 서비스를 통해 다양한 유형의 트래픽을 실행할 수 있게 해 줘요. 서비스가 여러 포트를 사용하도록 구성하면 애플리케이션이 효과적으로 통신하면서도 서비스 메시의 이점을 계속 활용할 수 있습니다.

이 가이드에서 다룬 주제에 대한 자세한 내용은 다음 리소스를 참고하세요.

  • Consul 서비스 메시 문서
  • Consul 서비스 구성 참조
  • Consul 프록시 구성 참조
  • Consul DNS 문서
  • Kubernetes에서 멀티포트 서비스 구성

더 알아보기 (Learn more)