Consul 서비스 메시 디버깅하기
Consul 서비스 메시 디버깅하기
개발이나 디버깅 목적으로 서비스에 연결해야 하는 경우가 자주 있어요. 서비스가 서비스 메시 리스너만 노출한다면, 그 서비스에 상호 TLS(mTLS) 연결을 수립할 방법이 필요합니다. consul connect proxy 명령어를 사용하면 Consul 에이전트(로컬 또는 원격)에 접근할 수 있는 모든 머신에서 이 작업을 수행할 수 있어요.
서비스 접근을 서비스 메시로만 제한하면, 서비스에 연결하는 유일한 방법은 인텐션(intentions)의 유효한 권한 부여를 통한 것임을 보장해요. 이는 개발자와 운영자에게도 적용될 수 있습니다.
출처: 문서
본문
메시 전용 서비스에 연결하기
예를 들어, psql로 연결하고 싶은 PostgreSQL 데이터베이스가 실행 중이지만, 유일한 논루프백(non-loopback) 리스너가 Connect를 통해서만 있다고 가정해 봐요. 또한 operator-mitchellh로 식별할 수 있는 ACL 토큰이 있다고 가정합니다. 로컬 프록시를 시작할 수 있어요.
$ consul connect proxy \
-service operator-mitchellh \
-upstream postgresql:8181
이 방식이 작동하는 이유는 소스 -service가 로컬 Consul 카탈로그에 등록될 필요가 없기 때문이에요. 그러나 유효한 식별 인증서를 검색하려면 ACL 토큰에 service:write 권한이 있어야 합니다. 이것은 사람을 나타내는 일종의 "디버그 서비스"로도 사용될 수 있어요. 위 예시에서 프록시는 operator-mitchellh로 식별하고 있습니다.
프록시가 실행되는 동안 이제 평소처럼 psql을 사용할 수 있어요.
$ psql --host=127.0.0.1 --port=8181 --username=mitchellh mydb
>
이 psql 세션은 이제 우리 Consul 카탈로그의 PostgreSQL 서비스에 대한 인증된 상호 TLS 연결을 통해 로컬 프록시로 진행됩니다.
서비스로 위장하기
-service 값을 임의의 서비스로 설정하면 어떤 소스 서비스로도 쉽게 위장할 수 있어요. 이 작업을 수행하려면 적절한 ACL 권한이 필요하다는 점을 유의하세요.
예를 들어 web에 대해 service:write를 허용하는 ACL 토큰이 있고 postgresql 서비스에 "web"으로 연결하려면 다음과 같이 프록시를 시작하면 돼요.
$ consul connect proxy \
-service web \
-upstream postgresql:8181