Istio API๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ดํธ์จ์ด ์ค์น ๋ฐ ์ ๊ทธ๋ ์ด๋
Cloud Service Mesh๋ ์๋น์ค ๋ฉ์์ ์ผ๋ถ๋ก ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌํ๋ ์ต์ ์ ์ ๊ณตํฉ๋๋ค. ๊ฒ์ดํธ์จ์ด๋ ๋ฉ์์ ์์ง์์ ์๋ํ๊ณ ๋ค์ด์ค๊ฑฐ๋ ๋๊ฐ๋ HTTP/TCP ์ฐ๊ฒฐ์ ์์ ํ๋ ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ์ค๋ช ํฉ๋๋ค. ๊ฒ์ดํธ์จ์ด๋ ์ฃผ๋ก ์ธ๊ทธ๋ ์ค ํธ๋ํฝ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง ๋ค๋ฅธ ์ ํ์ ํธ๋ํฝ์ ๊ด๋ฆฌํ๋๋ก ๊ฒ์ดํธ์จ์ด๋ฅผ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค.
์ด๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด: ์ด๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์์์ ๋๊ฐ๋ ํธ๋ํฝ์ ์ ์ฉ ์ถ๊ตฌ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ์ฌ ์ธ๋ถ ๋คํธ์ํฌ์ ์ก์ธ์คํ ์ ์๊ฑฐ๋ ์ก์ธ์คํด์ผ ํ๋ ์๋น์ค๋ฅผ ์ ํํ๊ฑฐ๋ ์ด๊ทธ๋ ์ค ํธ๋ํฝ์ ์์ ํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค(์: ๋ฉ์์ ๋ณด์ ์ถ๊ฐ).
์ธ๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด: ์ธ๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ด์ค๋ HTTP/TCP ์ฐ๊ฒฐ์ ์์ ํ๋ ์ ์ฉ ์ง์ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
East-west ๊ฒ์ดํธ์จ์ด: ์๋น์ค ์ํฌ๋ก๋๊ฐ ๋ค๋ฅธ ๋คํธ์ํฌ์ ๋ฉํฐ ๊ธฐ๋ณธ ๋ฉ์์ ํด๋ฌ์คํฐ ๊ฒฝ๊ณ๋ฅผ ๋์ด ํต์ ํ ์ ์๊ฒ ํ๋ east-west ํธ๋ํฝ์ ํ๋ก์์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ฒ์ดํธ์จ์ด๋ ์ธํฐ๋ท์ ๊ณต๊ฐ๋ฉ๋๋ค.
์ด ํ์ด์ง์์๋ ๊ฒ์ดํธ์จ์ด ํ๋ก์๋ฅผ ๋ฐฐํฌํ๊ณ ์
๊ทธ๋ ์ด๋ํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ณ ์ ํ istio-ingressgateway
๋ฐ istio-egressgateway
๊ฒ์ดํธ์จ์ด ํ๋ก์๋ฅผ ๊ตฌ์ฑํ๋ ์์์ ๋ํ ๊ถ์ฅ์ฌํญ์ ์ค๋ช
ํฉ๋๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐฐํฌํ ์ ์๊ณ ๊ฐ์ ํด๋ฌ์คํฐ ๋ด์์ ํ ํด๋ก์ง๋ฅผ 2๊ฐ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ ํด๋ก์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ Istio ๋ฌธ์์ ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ ํ ํด๋ก์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ ๊ถ์ฅ์ฌํญ
๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ ๊ถ์ฅ์ฌํญ์ ๊ด๋ฆฌํ ๋ฐ์ดํฐ ์์ญ ๋๋ ๋น๊ด๋ฆฌํ ๋ฐ์ดํฐ ์์ญ์ ์ฌ์ฉํ๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๊ด๋ฆฌํ ๋ฐ์ดํฐ ์์ญ ๊ถ์ฅ์ฌํญ
- ๊ด๋ฆฌํ ๋ฐ์ดํฐ ์์ญ์ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
- ๋ค์์คํ์ด์ค์ ๊ด๋ฆฌํ ๋ฒ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.
- ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๊ฒ์ดํธ์จ์ด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ณด์ ๊ถ์ฅ์ฌํญ์ ๋ฐ๋ผ ์ปจํธ๋กค ํ๋ ์ธ์ ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์๋ ์ฌ์ด๋์นด ์ฝ์ (์๋ ์ฝ์ )์ ์ฌ์ฉํ์ฌ ์๋น์ค์ ๋ํด ์ฌ์ด๋์นด ํ๋ก์๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ ๊ฒ์ดํธ์จ์ด์ ๋ํด ํ๋ก์ ๊ตฌ์ฑ์ ์ฝ์ ํฉ๋๋ค.
๊ถ์ฅ์ฌํญ์ ๋ฐ๋ผ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ์ต์ ๊ฐ์ ์ฌํญ ๋ฐ ๋ณด์ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์๋์ผ๋ก ๊ด๋ฆฌํ ๊ฒ์ดํธ์จ์ด์ ์ต์ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
- ๊ฒ์ดํธ์จ์ด ์ธ์คํด์ค์ ๊ด๋ฆฌ ๋ฐ ์ ์ง๋ณด์๋ฅผ Cloud Service Mesh ๊ด๋ฆฌ ๋ฐ์ดํฐ ์์ญ์ผ๋ก ์คํ๋ก๋ํฉ๋๋ค.
๋น๊ด๋ฆฌํ ๋ฐ์ดํฐ ์์ญ ๊ถ์ฅ์ฌํญ
- ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๊ฒ์ดํธ์จ์ด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ณด์ ๊ถ์ฅ์ฌํญ์ ๋ฐ๋ผ ์ปจํธ๋กค ํ๋ ์ธ์ ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์๋ ์ฌ์ด๋์นด ์ฝ์ (์๋ ์ฝ์ )์ ์ฌ์ฉํ์ฌ ์๋น์ค์ ๋ํด ์ฌ์ด๋์นด ํ๋ก์๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ ๊ฒ์ดํธ์จ์ด์ ๋ํด ํ๋ก์ ๊ตฌ์ฑ์ ์ฝ์ ํฉ๋๋ค.
๊ถ์ฅ์ฌํญ์ ๋ฐ๋ผ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ๋ค์์คํ์ด์ค ๊ด๋ฆฌ์๊ฐ ๊ถํ์ ์ ์ฒด ํด๋ฌ์คํฐ๋ก ์น๊ฒฉํ ํ์ ์์ด ๊ฒ์ดํธ์จ์ด๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
- ๊ด๋ฆฌ์๊ฐ Kubernetes ์ ํ๋ฆฌ์ผ์ด์ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฐํฌ ๋๊ตฌ ๋๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด์ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
- ๊ด๋ฆฌ์์๊ฒ ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ๋ฅผ ์๋ฒฝํ๊ฒ ์ ์ดํ๋๋ก ๊ถํ์ ๋ถ์ฌํ๊ณ ์์ ์ ๊ฐ์ํํ ์๋ ์์ต๋๋ค. ์ ์ ๊ทธ๋ ์ด๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฑฐ๋ ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋์์ผ๋ฉด ๊ด๋ฆฌ์๊ฐ ๊ฒ์ดํธ์จ์ด ํฌ๋๋ฅผ ๋ค์ ์์ํ์ฌ ์ ๋ฐ์ดํธํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ๋ฅผ ์๋ํ๋ ํ๊ฒฝ์ด ์๋น์ค์ ๋ํด ์ฌ์ด๋์นด ํ๋ก์๋ฅผ ์๋ํ๋ ํ๊ฒฝ๊ณผ ๋์ผํ๊ฒ ๋ฉ๋๋ค.
์ํ ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ
๊ธฐ์กด ๋ฐฐํฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ฅผ ์ง์ํ๊ธฐ ์ํด Cloud Service Mesh์์๋ ๊ฒ์ดํธ์จ์ด๋ฅผ Istio๋ก ๋ฐฐํฌํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ๋ฒ์ธ IstioOperator
, Helm, Kubernetes YAML์ ์ง์ํฉ๋๋ค. ๊ฐ ๋ฐฉ๋ฒ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ์ต์ํ ๋ฐฉ๋ฒ์ ์ ํํ ์ ์์ง๋ง ์์ ์ด ์ฝ๊ณ ์์ค ์ ์ด์ ํ์ด๋๋ ์ด์
๋ ๋งค๋ํ์คํธ๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฏ๋ก Kubernetes YAML ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์ ๋จ๊ณ์์๋ ์ํ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์์ง ์์ผ๋ฉด ๊ฒ์ดํธ์จ์ด์ ๋ค์์คํ์ด์ค๋ฅผ ๋ง๋ญ๋๋ค.
GATEWAY_NAMESPACE
๋ฅผ ๋ค์์คํ์ด์ค์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.kubectl create namespace GATEWAY_NAMESPACE
๋ค์์คํ์ด์ค์ ์ฝ์ ์ ์ฌ์ฉ ์ค์ ํฉ๋๋ค. ์ด ๋จ๊ณ๋ ์ปจํธ๋กค ํ๋ ์ธ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ด๋ฆฌํ(TD)
- ๊ธฐ๋ณธ ์ฝ์ ๋ผ๋ฒจ์ ๋ค์์คํ์ด์ค์ ์ ์ฉํฉ๋๋ค.
kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev- istio-injection=enabled --overwrite
๊ด๋ฆฌํ(Istiod)
๊ถ์ฅ: ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ค์์คํ์ด์ค์ ๊ธฐ๋ณธ ์ฝ์ ๋ผ๋ฒจ์ ์ ์ฉํฉ๋๋ค.
kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev- istio-injection=enabled --overwrite
๊ด๋ฆฌํ Istiod ์ปจํธ๋กค ํ๋ ์ธ์ด ์๋ ๊ธฐ์กด ์ฌ์ฉ์: ๊ธฐ๋ณธ ์ฝ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง๋ง ๋ฒ์ ๊ธฐ๋ฐ ์ฝ์ ์ ์ง์๋ฉ๋๋ค. ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ์ถ์ ์ฑ๋์ ์ฐพ์ต๋๋ค.
kubectl -n istio-system get controlplanerevision
์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํฉ๋๋ค.
NAME AGE asm-managed-rapid 6d7h
์ฐธ๊ณ : ์ ๋ชฉ๋ก์ ๋ ๊ฐ์ ์ปจํธ๋กค ํ๋ ์ธ ๋ฒ์ ์ด ํ์๋๋ฉด ํ๋๋ฅผ ์ญ์ ํฉ๋๋ค. ํด๋ฌ์คํฐ์ ์ฌ๋ฌ ์ปจํธ๋กค ํ๋ ์ธ ์ฑ๋์ ๋๋ ๋ฐฉ์์ ์ง์๋์ง ์์ต๋๋ค.
์ถ๋ ฅ์์
NAME
์ด ์๋์ ๊ฐ์ Cloud Service Mesh ๋ฒ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ถ์ ์ฑ๋์ ํด๋นํ๋ ๋ฒ์ ๋ผ๋ฒจ์ ๋๋ค.๋ค์์คํ์ด์ค์ ๋ฒ์ ๋ผ๋ฒจ์ ์ ์ฉํฉ๋๋ค.
kubectl label namespace GATEWAY_NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
ํด๋ฌ์คํฐ ๋ด
๊ถ์ฅ: ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ค์์คํ์ด์ค์ ๊ธฐ๋ณธ ์ฝ์ ๋ผ๋ฒจ์ ์ ์ฉํฉ๋๋ค.
kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev- istio-injection=enabled --overwrite
๊ธฐ๋ณธ ์ฝ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง๋ง ๋ฒ์ ๊ธฐ๋ฐ ์ฝ์ ์ด ์ง์๋ฉ๋๋ค. ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ
istiod
์์ ๋ฒ์ ๋ผ๋ฒจ์ ์ฐพ์ต๋๋ค.kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
๋ค์์คํ์ด์ค์ ๋ฒ์ ๋ผ๋ฒจ์ ์ ์ฉํฉ๋๋ค. ๋ค์ ๋ช ๋ น์ด์์
REVISION_LABEL
์ ์ด์ ๋จ๊ณ์์ ํ์ธํistiod
๋ฒ์ ๋ผ๋ฒจ์ ๊ฐ์ ๋๋ค.kubectl label namespace GATEWAY_NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
anthos-service-mesh
์ ์ฅ์์์ ์ํ ๊ฒ์ดํธ์จ์ด์ ๊ตฌ์ฑ ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.๋๋ ํฐ๋ฆฌ๋ฅผ
samples
๋๋ ํฐ๋ฆฌ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋๋ ํฐ๋ฆฌ์ ์๋์ง ํ์ธํ๋ ค๋ฉดls
๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋๋ ํฐ๋ฆฌ ์ฝํ ์ธ ๋ฅผ ๋์ดํ ํ ๋ค์ ๋จ๊ณ์์ ์ก์ธ์คํgateways
๋๋ ํฐ๋ฆฌ์online-boutique
๋๋ ํฐ๋ฆฌ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.์ธ๊ทธ๋ ์ค ๋๋ ์ด๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
samples/gateways/
๋๋ ํฐ๋ฆฌ์ ์๋ ๊ฒ์ดํธ์จ์ด๋ฅผ ์๋ ๊ทธ๋๋ก ๋ฐฐํฌํ๊ฑฐ๋ ํ์์ ๋ฐ๋ผ ์์ ํ ์ ์์ต๋๋ค.์ธ๊ทธ๋ ์ค
kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-ingressgateway
์ด๊ทธ๋ ์ค
kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-egressgateway
๋ฐฐํฌ๋ฅผ ๋ง๋ ํ์ ์ ์๋น์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
kubectl get pod,service -n GATEWAY_NAMESPACE
์ถ๋ ฅ์ด ๋ค์๊ณผ ๋น์ทํ๊ฒ ํ์๋๋์ง ํ์ธํฉ๋๋ค.
NAME READY STATUS RESTARTS AGE pod/istio-ingressgateway-856b7c77-bdb77 1/1 Running 0 3s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/istio-ingressgateway LoadBalancer 10.24.5.129 34.82.157.6 80:31904/TCP 3s
๋ค๋ฅธ Kubernetes ์ ํ๋ฆฌ์ผ์ด์
์ฒ๋ผ ๊ฒ์ดํธ์จ์ด ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. anthos-service-mesh-packages
์ ์ฅ์์ ์ํ์ ์๋ด ๋ฐ ๋น ๋ฅธ ์์์ฉ์
๋๋ค. ํ์์ ๋ฐ๋ผ ๋ง์ถค์ค์ ํฉ๋๋ค.
๊ฒ์ดํธ์จ์ด ์ ํ๊ธฐ
istio-ingressgateway
๋ฐ istio-egressgateway
ํ๋ก์์ ๊ฒ์ดํธ์จ์ด ๊ตฌ์ฑ์ ์ ์ฉํ๋ฉด ์ด๋ค ํธ๋ํฝ์ ๋ฉ์๋ก ๋ณด๋ด๊ณ ๋ด๋ณด๋ผ์ง ์ง์ ํ์ฌ ๋ฉ์์ ์ธ๋ฐ์ด๋ ๋ฐ ์์๋ฐ์ด๋ ํธ๋ํฝ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ ํฌ๋์ ๋ผ๋ฒจ์ ๊ฒ์ดํธ์จ์ด ๊ตฌ์ฑ ๋ฆฌ์์ค์์ ์ฌ์ฉ๋๋ฏ๋ก ๊ฒ์ดํธ์จ์ด ์ ํ๊ธฐ๊ฐ ์ด๋ฌํ ๋ผ๋ฒจ๊ณผ ์ผ์นํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์์ ๋ฐฐํฌ์์ istio=ingressgateway
๋ผ๋ฒจ์ ๊ฒ์ดํธ์จ์ด ํฌ๋์ ์ค์ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฐฐํฌ์ ๊ฒ์ดํธ์จ์ด ๊ตฌ์ฑ์ ์ ์ฉํ๋ ค๋ฉด ๋์ผํ ๋ผ๋ฒจ์ ์ ํํด์ผ ํฉ๋๋ค.
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: gateway
spec:
selector:
istio: ingressgateway
...
๊ฒ์ดํธ์จ์ด ๊ตฌ์ฑ ๋ฐ ๊ฐ์ ์๋น์ค ์์๋ Online Boutique ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ frontend.yaml์ ์ฐธ์กฐํ์ธ์.
๊ฒ์ดํธ์จ์ด ์ ๊ทธ๋ ์ด๋
์ธํ๋ ์ด์ค ์ ๊ทธ๋ ์ด๋
๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์์๋ ์ธํ๋ ์ด์ค ์ ๊ทธ๋ ์ด๋ ํจํด์ ๋ฐ๋ผ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ ๊ทธ๋ ์ด๋ํด์ผ ํฉ๋๋ค. ๊ฒ์ดํธ์จ์ด๋ ํฌ๋ ์ฝ์ ์ ์ฌ์ฉํ๋ฏ๋ก, ์์ฑ๋ ์ ๊ฒ์ดํธ์จ์ด ํฌ๋๋ ๋ฒ์ ์ ํฌํจํ๋ ์ต์ ๊ตฌ์ฑ์ผ๋ก ์๋ ์ฝ์ ๋ฉ๋๋ค.
๊ฒ์ดํธ์จ์ด์์ ์ฌ์ฉ ์ค์ธ ์ปจํธ๋กค ํ๋ ์ธ ๋ฒ์ ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ์์ istio.io/rev
๋ผ๋ฒจ์ ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์ฐจ์ ์ฌ์์๋ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
๊ด๋ฆฌํ ์ปจํธ๋กค ํ๋ ์ธ
Google์์ ๊ด๋ฆฌํ ์ปจํธ๋กค ํ๋ ์ธ์ ์ปจํธ๋กค ํ๋ ์ธ ์ ๊ทธ๋ ์ด๋๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ๋ฅผ ๋ค์ ์์ํ๊ธฐ๋ง ํ๋ฉด ์ต์ ๊ตฌ์ฑ๊ณผ ๋ฒ์ ์ ์ ํฌ๋๊ฐ ์๋์ผ๋ก ์ฝ์ ๋ฉ๋๋ค.
kubectl rollout restart deployment istio-ingressgateway \
-n GATEWAY_NAMESPACE
ํด๋ฌ์คํฐ ๋ด ์ปจํธ๋กค ํ๋ ์ธ
ํด๋ฌ์คํฐ ๋ด ์ปจํธ๋กค ํ๋ ์ธ์ด ์์ ๋ ๊ฒ์ดํธ์จ์ด์ ๋์ผํ ํจํด์ ์ ์ฉํ๋ ค๋ฉด ๊ฒ์ดํธ์จ์ด์์ ์ฌ์ฉ ์ค์ธ ์ปจํธ๋กค ํ๋ ์ธ ๋ฒ์ ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ์์ ์์ฐจ์ ์ฌ์์์ ํธ๋ฆฌ๊ฑฐํ๋ istio.io/rev
๋ผ๋ฒจ์ ์ค์ ํฉ๋๋ค. ํ์ํ ๋จ๊ณ๋ ๋ค์์คํ์ด์ค ๋๋ ๊ฒ์ดํธ์จ์ด ํฌ๋์ ๋ฒ์ ๋ผ๋ฒจ์ ์
๋ฐ์ดํธํด์ผ ํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
๋ค์์คํ์ด์ค์ ์ฝ์ ๋ผ๋ฒจ์ ์ง์ ํ ๊ฒฝ์ฐ ๋ค์์คํ์ด์ค์
istio.io/rev
๋ผ๋ฒจ์ ์ ๋ฒ์ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.kubectl label namespace GATEWAY_NAMESPACE \ istio-injection- istio.io/rev=REVISION \ --overwrite
๊ฒ์ดํธ์จ์ด ํฌ๋์๋ง ์ฝ์ ์ ์ฌ์ฉ ์ค์ ํ ๊ฒฝ์ฐ ๋ฐฐํฌ์
istio.io/rev
๋ผ๋ฒจ์ ๋ค์ Kubernetes YAML ํ์ผ๊ณผ ๊ฐ์ ์ ๋ฒ์ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.cat <<EOF > gateway-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: istio-ingressgateway namespace: GATEWAY_NAMESPACE spec: selector: matchLabels: istio: ingressgateway template: metadata: annotations: # This is required to tell Cloud Service Mesh to inject the gateway with the # required configuration. inject.istio.io/templates: gateway labels: istio: ingressgateway istio.io/rev: REVISION spec: containers: - name: istio-proxy image: auto # The image will automatically update each time the pod starts. EOF kubectl apply -f gateway-deployment.yaml
์นด๋๋ฆฌ์ ์ ๊ทธ๋ ์ด๋(๊ณ ๊ธ)
ํด๋ฌ์คํฐ ๋ด ์ปจํธ๋กค ํ๋ ์ธ์ ์ฌ์ฉ ์ค์ด๊ณ ์ ์ปจํธ๋กค ํ๋ ์ธ ๋ฒ์ ์ ์ถ์๋ฅผ ๋ ๋๋ฆฌ๊ฒ ์ ์ดํ๋ ค๋ฉด ์นด๋๋ฆฌ์ ์
๊ทธ๋ ์ด๋ ํจํด์ ๋ฐ๋ฅผ ์ ์์ต๋๋ค. ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ์ ์ฌ๋ฌ ๋ฒ์ ์ ์คํํ๊ณ ํธ๋ํฝ ์ผ๋ถ์์ ๋ชจ๋ ์์ํ ๋๋ก ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ๋ฒ์ ์ ์นด๋๋ฆฌ์๋ก ์ถ์ํ๋ ค๋ฉด istio.io/rev=REVISION
๋ผ๋ฒจ์ ์ ๋ฒ์ ๋ฐ ์ ์ด๋ฆ์ผ๋ก ์ค์ ํ์ฌ ๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ ๋ณต์ฌ๋ณธ์ ๋ง๋ญ๋๋ค(์: istio-ingressgateway-canary
).
apiVersion: apps/v1
kind: Deployment
metadata:
name: istio-ingressgateway-canary
namespace: GATEWAY_NAMESPACE
spec:
selector:
matchLabels:
istio: ingressgateway
template:
metadata:
annotations:
inject.istio.io/templates: gateway
labels:
istio: ingressgateway
istio.io/rev: REVISION # Set to the control plane revision you want to deploy
spec:
containers:
- name: istio-proxy
image: auto
์ด ๋ฐฐํฌ๊ฐ ์์ฑ๋๋ฉด ๋ ๊ฐ์ง ๋ฒ์ ์ ๊ฒ์ดํธ์จ์ด๊ฐ ์๊ธฐ๊ณ , ๋ ๋ฒ์ ์ ๋ชจ๋ ๋์ผํ ์๋น์ค์์ ์ ํ๋ฉ๋๋ค.
kubectl get endpoints -o
"custom-columns=NAME:.metadata.name,PODS:.subsets[*].addresses[*].targetRef.name"
NAME PODS
istio-ingressgateway istio-ingressgateway-788854c955-8gv96,istio-ingressgateway-canary-b78944cbd-mq2qf
์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ํ ๋๋ก ์๋ํ๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ด์ istio.io/rev ๋ผ๋ฒจ์ด ์ค์ ๋ ๋ฐฐํฌ๋ฅผ ์ญ์ ํ์ฌ ์ ๋ฒ์ ์ผ๋ก ์ ํํฉ๋๋ค.
kubectl delete deploy/istio-ingressgateway -n GATEWAY_NAMESPACE
์ ๋ฒ์ ์ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ์ฉํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ istio.io/rev ๋ผ๋ฒจ์ด ์ค์ ๋ ๋ฐฐํฌ๋ฅผ ์ญ์ ํ์ฌ ์ด์ ๋ฒ์ ์ผ๋ก ๋ค์ ์ ํํฉ๋๋ค.
kubectl delete deploy/istio-ingressgateway-canary -n GATEWAY_NAMESPACE
๊ณ ๊ธ ๊ตฌ์ฑ
๊ฒ์ดํธ์จ์ด ์ต์ TLS ๋ฒ์ ๊ตฌ์ฑ
Cloud Service Mesh์ ๊ฒฝ์ฐ ๊ฒ์ดํธ์จ์ด ์๋ฒ์ ๊ธฐ๋ณธ ์ต์ TLS ๋ฒ์ ์ 1.2์
๋๋ค.
minProtocolVersion
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ TLS ๋ฒ์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ServerTLSSettings๋ฅผ ์ฐธ์กฐํ์ธ์.
์ง์๋์ง ์๋ ๊ธฐ๋ฅ
TRAFFIC_DIRECTOR
์ปจํธ๋กค ํ๋ ์ธ ๊ตฌํ์ด ์์ผ๋ฉด ๊ฒ์ดํธ์จ์ด์ ๋ค์ ํ๋๋ ๊ฐ์ด ์ง์๋์ง ์์ต๋๋ค.
AUTO_PASSTHROUGH
๊ฐ์ด ์๋ ServerTLSSettings.TLSmode- ServerTLSSettings.verifyCertificateSpki
- ServerTLSSettings.verifyCertificateHash
๊ฒ์ดํธ์จ์ด ๋ฌธ์ ํด๊ฒฐ
auto
์์ ๊ฒ์ดํธ์จ์ด ์ด๋ฏธ์ง ์
๋ฐ์ดํธ ์คํจ
๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฐฐํฌํ๊ฑฐ๋ ์
๊ทธ๋ ์ด๋ํ๋ฉด Cloud Service Mesh๊ฐ image
ํ๋์ auto
๋ฅผ ์๋ฆฌํ์์๋ก ์ฝ์
ํฉ๋๋ค. ๋ณํ ์นํ
ํธ์ถ ํ Cloud Service Mesh๊ฐ ์ด ์๋ฆฌํ์์๋ฅผ ์ค์ Cloud Service Mesh ํ๋ก์ ์ด๋ฏธ์ง๋ก ์๋์ผ๋ก ๋ฐ๊ฟ๋๋ค. ์นํ
๋ณํ ํธ์ถ์ด ์คํจํ๋ฉด auto
์๋ฆฌํ์์๊ฐ ์ ์ง๋๊ณ ์ปจํ
์ด๋๋ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ชป๋ ๋ค์์คํ์ด์ค ๋ผ๋ฒจ์ด ์์ธ์
๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ค์์คํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋์ง ํ์ธํ ํ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ค์ ๋ฐฐํฌํ๊ฑฐ๋ ์
๊ทธ๋ ์ด๋ํฉ๋๋ค.