[k8s] consul: Service Discovery
์ด์ ํฌ์คํธ
https://blog.naver.com/sssang97/223132055988
consul์ ์ฌ์ฉํ๋ ์ฃผ ๋ชฉ์ ์ค ํ๋๋ Service Discovery๋ค.
ํน์ ์๋ฒ๋ค์ IP๋ฅผ consul์ Service Registry์ ๋ฑ๋กํ๊ณ , ๊ทธ๊ฑธ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ ๋๋ง๋ค ๊บผ๋ด์ ํธ์ถํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.

์๋ฒ ์์ด์ ํธ ์คํ (with consul CLI)
์๋ฒ์ IP ์ฃผ์๋ฅผ consul์ ๋ฑ๋กํ๋ ค๋ฉด, ์ฐ์ consul cli๋ฅผ ์ค์นํด์ผ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์๋ฒ์ฉ Pod๋ฅผ ๋จผ์ ๋์ด ๋ค์์
apiVersion: v1
kind: Pod
metadata:
name: server
labels:
app: server
annotations:
consul.hashicorp.com/connect-inject: 'true'
spec:
containers:
- name: server
image: myyrakle/node-server-for-test
์ ์ํด์

consul CLI๋ฅผ ์ค์นํ๋ค.


๊ทธ๋ผ ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์๋น์ค๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
consul services register -name=์๋น์ค๋ช
-address=IP์ฃผ์ -port=ํฌํธ --http-addr=์นUI์ฃผ์consul services register -name=test-server -address=$(hostname -I) -port=80 --http-addr=34.123.54.86

๊ทธ๋ฌ๋ฉด ์ฝ์ UI์๋ ์๋น์ค๊ฐ ์ฐ๋์ด ๋ ๊ฒ์ด๊ณ

IP๋ฅผ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์๋ ์ง๊ด์ ์ธ ํ์ธ์ ์ํด ์ปจํ
์ด๋์ ์ง์ ๋ค์ด๊ฐ์ ์์
์ ํ๋๋ฐ, ์ค์ ๋ก ํ๋ก๋์
์ ์ฌ์ฉํ ๋๋ Docker Entrypoint์์ ์๋์ผ๋ก register ์คํ์ ํ๊ฒ ํด์ผ ํ๋ค.
์๋๋ฉด sidecar ์ปจํ
์ด๋๋ฅผ ๋ณ๋๋ก ๊ตฌ์ฑํด์ ๊ฑฐ๊ธฐ์๋ง consul agent๋ฅผ ์ค์นํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ผ ๊ฒ์ด๋ค.
Service IP ์ ์์ ๋ณด ๊บผ๋ด์ค๊ธฐ (Service Discovery)
๋ฑ๋ก๋ ์๋น์ค์ ์ ๋ณด๋ฅผ ๊บผ๋ด์ค๋ ค๋ฉด Restful API๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
.../v1/catalog/service/์๋น์ค๋ช
์ฌ๊ธฐ์ ServiceAddress์ ServicePort๋ฅผ ๊บผ๋ด์์ ์์ฒญํ ๋ ์ฌ์ฉํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
Service Registry ๋ฑ๋ก ํด์ ํ๊ธฐ
CLI์์ deregister ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ์๋น์ค ์ ๋ณด๋ฅผ ๋ค์ ๋ด๋ฆด ์ ์๋ค.

์ฐธ์กฐ
https://developer.hashicorp.com/consul/commands/services/register
https://developer.hashicorp.com/consul/api-docs/catalog#list-services