Istio Virtual Machine Architecture
์์งํ ์ด ๋ถ๋ถ์ ์ ๋๋ก ์ดํด ๋ชป ํ์ต๋๋ค ใ ใ ์ง์ ์ค์ต ํด๋ณด๊ธฐ๋ ์ด๋ ค์ด ์ฃผ์ ๋ผ์ ์ผ๋จ Istio์์ ์ ๊ณตํ ๋ฌธ์๋ค์ ๊ผผ๊ผผํ ๊ทธ๋ฆฌ๊ณ ์ถฉ์คํ ์ฝ๊ณ ์ ๊ฐ ์ดํดํ ๊ฑธ ์ต๋ํ ์ค๋ช ํด๋ณด์์ต๋๋ค. ํน์๋ ์ค๋ฅ๋ ๋ณด์ถฉ์ด ํ์ํ ๋ถ๋ถ์ ๋ฐ๊ฒฌํ์ ๋ค๋ฉด ์๋ ค์ฃผ์ฌ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ๐
Istio๋ ์ ๊ธฐํ๊ฒ๋ ์๋น์ค ๋ฉ์ฌ๋ฅผ K8s ํด๋ฌ์คํฐ ๋ฟ๋ง ์๋๋ผ non-kubernetes ์ํฌ๋ก๋๊น์ง ์ง์์ ํ๋ค!! Istio ๋ฌธ์์์๋ ์ด๋ฐ non-kubernetes ์ํฌ๋ก๋์ ํ๊ฒฝ์ โVirtual Machineโ(์ดํ VM)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฒ์์๋ โk8s ํด๋ฌ์คํฐ ๋ฐ๊นฅ์ ์ํฌ๋ก๋๊น์ง ์ ๊ฒฝ ์ฐ๋๊ฑด ๋์ ์๋์ผ?โ๋ผ๊ณ ์๊ฐ ํ๋๋ฐ, ์ฒ์ฒํ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ ์๋ฌด๋ฆฌ K8s๊ฐ ์ข์๋ ์ด๋ค ์ปดํฌ๋ํธ๋ ๋ณด์์ด๋ ๊ท์ ๋๋ฌธ์ K8s ํ๊ฒฝ์์ ์ด์ํ์ง ๋ชปํ๊ณ , Virtual Machine์์ ์ด์ํ ์ ๋ฐ์ ์๋ ์ํฉ ์๊ธธ ์ ์๋ ๊ฒ ๊ฐ๋ค. Istio๋ ์ด๋ฐ ์ํฉ๊น์ง ๊ณ ๋ คํ ๊ฒ!!
์๊ฐํด๋ณด๋ ์ธ ํ์ฌ๋ DB๋ Kafka ๊ฐ์ ์๋น์ค๋ K8s๊ฐ ์๋๋ผ ๋ณ๋์ managed ์๋น์ค์ ๋์์ ์ด์ํ๊ณ ์๊ธฐ ํ๋คโฆ
Bookinfo with a Virtual Machine
Istio์์ VM Architecture๋ฅผ ์ดํดํ๊ธฐ ์ํด ์น์ ํ ์์ ๋ ๋ง๋ จํด๋๋ค. istio ์์ ๊ทธ๋ฆผ์ ๋ฐ๋ฅด๋ฉด โMySQLโ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง K8s ๋ฐ๊นฅ์ VM์์ ๋๋ฆฌ๊ณ ์๋ค.
Virtual Machine Installation
https://istio.io/latest/docs/setup/install/virtual-machine/
๊ทธ๋ฆผ์์๋ ๋ณด์ด๋ฏ istio๊ฐ VM ์ํฌ๋ก๋๋ฅผ ์๋น์ค ๋ฉ์ฌ์ ํตํฉํ๊ธฐ ์ํด์ VM ์ํฌ๋ก๋์๋ istio๋ฅผ ์ค์นํด์ผ ํ๋ค!! (์ญ์ ๊ทธ๋ฅ ๋๋๊ฒ ์๋๋คโฆ ใ ใ )
์ผ๋จ VM์ ์ ๋ฌํ Istio ์๋น์ค๋ฉ์ฌ์ ์ ๋ณด๋ฅผ ์
๋ ฅํด์ผ ํ๋ค. ์ด๋, Istio์ WorkloadGroup
๋ฆฌ์์ค๊ฐ ํ์ํ๋ฐ, ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ข๋ ์์ธํ ๋ค๋ฃจ๊ฒ ๋ค.
์ํผ WorkloadGroup
์ด ์์ฑ๋ ์ํ๋ผ๋ฉด, isitoctl x workload entry configure ...
๋ช
๋ น์ด๋ฅผ ํตํด VM์ ์ ๋ฌํ Istio ์๋น์ค๋ฉ์ฌ ์ ๋ณด๊ฐ ๋ด๊ธด ํ์ผ์ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ข ํ์ผ๋ค์ VM ์ชฝ์ผ๋ก ์ฎ๊ฒจ์ค๋ค.
VM์ istio์ VM integration runtime์ ์ค์นํด์ค๋ค.
curl -LO https://storage.googleapis.com/istio-release/releases/1.21.0/deb/istio-sidecar.deb
sudo dpkg -i istio-sidecar.deb
VM์ istio runtime๋ฅผ ๋์์ํจ๋ค.
sudo systemctl start istio
์ด๋ ๊ฒ VM ์ชฝ์ istio runtime์ ๋๋ฆฌ๊ฒ ๋๋ฉด, k8s ํด๋ฌ์คํฐ์์ ํ๋ ๊ฒ์ฒ๋ผ CoreDNS์ FQDN์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ทธ๊ฑธ istio runtime์ด ์์๋ฃ๊ณ ์ ๋ผ์ฐํ ํด์ค๋ค๊ณ ํ๋ค!!
# VM์์ k8s ๋คํธ์ํฌ์ ์ํฌ๋ก๋๋ก ์์ฒญ!!
$ curl helloworld.sample.svc:5000/hello
Hello version: v1, instance: helloworld-v1-578dd69f69-fxwwk
์ง์ง ์ ๊ธฐํ๋ค!!
์ด์ ๋ฐ๋๋ก K8s์์ VM์ ์๋ mysql์ ์ ๊ทผํ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ด K8s svc๋ฅผ ๋ง๋ ํ, ์ ๊ทผํ๋ฉด ๋๋ค.
apiVersion: v1
kind: Service
metadata:
name: mysqldb
namespace: vm
labels:
app: mysqldb
spec:
ports:
- port: 3306
name: tcp
selector:
app: mysqldb
$ k exec -it ... -- sh
~ $ mysql -h http://mysqldb.vm.svc.cluster.local ...
VM Service Association
์์์ istioctl x workload entry configure ...
๋ช
๋ น์ด๋ก VM์ ์ ๋ฌํ istio ์๋น์ค ๋ฉ์ฌ ์ ๋ณด๊ฐ ๋ด๊ธด ํ์ผ์ ์์ฑํ๋ค๋ ๊ฒ ๊ธฐ์ตํ๋๊ฐ? ์ด๋, Istio์ WorkloadEntry
๋๋ WorkloadGroup
์ด ํ์ํ๋ค๊ณ ๋งํ๋๋ฐ, ์ด ๋ฆฌ์์ค๊ฐ ๋ญ์ง ์ดํด๋ณด์.
์ผ๋จ WorkloadEntry
์ WorkloadGroup
๋๋ค Istio์์ VM workload๋ฅผ ํํํ๊ธฐ ์ํ ๋ฆฌ์์ค์ด๋ค. Istio ๋ฌธ์์์๋ ๋์ด ๊ฐ๊ฐ K8s Pod๊ณผ K8s Deployment์ ๋์๋๋ค๊ณ ์๊ฐํ๊ณ ์๋ค. WorkloadGroup
๋ฅผ ์ฌ๋ฃ๋ก istioctl x workload entry configure ...
์์ ์๋น์ค๋ฉ์ฌ ์ ๋ณด ํ์ผ์ ๋ง๋ค๊ณ , ์ค์ VM์ด ์๋น์ค ๋ฉ์ฌ์ ์ถ๊ฐ๋๋ฉด WorkloadEntry
๋ฆฌ์์ค๊ฐ ์๋์ผ๋ก ๋จ๊ฒ ๋๋ค๊ณ ํ๋ค!! (์ ๊ธฐ์ ๊ธฐ)
WorkloadGroup ๋ง๋ค๊ธฐ
์ผ๋จ WorkloadGroup
๋ฆฌ์์ค๊ฐ ํ์ํ๋ค. ๋ง๋๋ ๋ฐฉ๋ฒ์ istioctl x workload
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ทธ๋ฅ yaml ํ์ผ ๋ง๋ค์ด์ ์์ฑํ๋ ๊ฒ 2๊ฐ์ง๊ฐ ์๋ค.
istioctl
๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
istioctl x workload group create \
--name product-vm \
--namespace default \
--labels app=product \
--ports http=8080 \
--serviceAccount default
---
# WorkloadGroup์ด ์์ฑ๋์ง ์๊ณ , yaml๋ง ํ๋ฆฐํธ ํด์ค๋ค!
apiVersion: networking.istio.io/v1alpha3
kind: WorkloadGroup
metadata:
name: product-vm
namespace: default
spec:
metadata:
labels:
app: product
template:
ports:
http: 8080
serviceAccount: default
์์ฐ! ๋ฐ๋ก yaml ํ์ผ์ด ์ถ๋ ฅ ๋๋ค!! ์ ๊ฑธ ๊ทธ๋๋ก ์ ์ฅํ๊ณ ๋ง๋ค๊ธฐ๋ง ํ๋ฉด ๋๋ค ใ ใ
VM์ ์ถ๊ฐํ๋ฉด WorkloadEntry
๋ฆฌ์์ค๊ฐ ์์ฑ
์ํผ ์์์ ๋ง๋ WorkloadGroup
์ผ๋ก VM์ ์ถ๊ฐํ๋ฉด ๋์ํ๋ WorkloadEntry
๊ฐ ์์ฑ๋๋ค!!
apiVersion: networking.istio.io/v1beta1
kind: WorkloadEntry
metadata:
annotations:
istio.io/autoRegistrationGroup: product-vm # ๋ง๋ค์๋ ๊ฒ!
labels:
app: product
name: product-vm-1.2.3.4
spec:
address: 1.2.3.4 # ์๋์ผ๋ก ๋ด๊ธด!
labels:
app: product
serviceAccount: default
์ด๋ ๊ฒ ๋ง๋ WorkloadEntry
์ ์ ๊ทผํ๋ ค๋ฉด K8s Service๋ฅผ ๋ง๋ค์ด์ ์ฃผ๋ฉด ๋๋ค.
์ด๋, ์ ๊ธฐํ ์ ์ K8s Service๋ฅผ ๋ง๋ค ๋, K8s Pod์ด๋ VM workload๋ ๊ฐ์ด ๋ฌถ์ ์๋ ์๋ค๋ ๊ฑฐ๋ค!!
K8s Svc๊ฐ ์ด๋ ๊ฒ ๊ตฌ์ฑ๋๋ฉด, ํธ๋ํฝ์ K8s Pod๊ณผ Istio WorkloadEntry
์ ๋ ๊ณณ์ ๋ผ์ฐํ
ํ ์ ์๊ฒ ๋๋ค!! (๋๋ผ์!!)
์ด๊ฑธ ๊ณต๋ถํด์ผ ํ๋?
์๋ ์ด๊ฑธ ๊ณต๋ถํด์ผ ํ๋ ๋ง์์ผ ํ๋ ๊ณ ๋ฏผ์ ์ข ํ๋๋ฐ, ICA ์ํ์ ์ํ ์ฃผ์ ๋ชฉ๋ก์ โnon-kubernetes ์ํฌ๋ก๋์ ๋ํด์๋ ๋ฌผ์ด๋ณผ ์ ์์ต๋๋คโ๋ผ๊ณ ์ ํ์์ด์ ์ด ์ ๋ฌผ๊ณ ๊ณต๋ถํ๋คโฆ ๐ฌ