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 ์ํฌ๋ก๋์ ๋ํด์๋ ๋ฌผ์ด๋ณผ ์ ์์ต๋๋คโ๋ผ๊ณ ์ ํ์์ด์ ์ด ์ ๋ฌผ๊ณ ๊ณต๋ถํ๋คโฆ ๐ฌ