๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

 

 

Istio (์ดํ•˜ ์ด์Šคํ‹ฐ์˜ค) ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋Œ€ํ‘œ์ ์ธ ์„œ๋น„์Šค ๋ฉ”์‰ฌ ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด์Šคํ‹ฐ์˜ค๋Š” ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋„ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— Nginx ์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•„์š” ์—†์–ด์š”.

 

์ด๋ฒˆ ๊ธ€์—์„œ Istio ์˜ ํ•ต์‹ฌ ์ž์›์ธ IngressGateway ์— TLS ๋ฅผ ์ ์šฉ์‹œ์ผœ ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค!

Istio ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ธ€์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— Gateway, VirtualService ์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์„ค๋ช…์€ ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋ ›์ธ ๋‘๋”์ฝ”๋“œ~

 

์‹ค์Šต ํ™˜๊ฒฝ์€ ์•„๋ž˜์™€ ๊ฐ™์•„์š”.

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค v1.26.2
  • ์ด์Šคํ‹ฐ์˜ค v1.17.2

 

๊ณต์‹ ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š” ์˜ˆ์ œ๋Š” ๋ถˆํ•„์š”ํ•œ ๋‚ด์šฉ์ด ๋งŽ์•„์„œ ๋”ฑ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์‹ค์Šตํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋” ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

 

TLS ๋ฅผ ์ ์šฉ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋จผ์ € ๊ฐœ์ธํ‚ค(key)์™€ ์ธ์ฆ์„œ(crt) ๋ฅผ ์ƒ์„ฑํ•ด์ค์‹œ๋‹ค.

# 2048 ๋น„ํŠธ์˜ RSA ํ‚ค ์ƒ์„ฑ
openssl genrsa -out tls.key 2048 

# ์ƒ์„ฑํ•œ key ๊ฐ€์ง€๊ณ  crt ์ƒ์„ฑ
openssl req -new -x509 -sha256 -key tls.key -out tls.crt -subj "/CN=kingbj0429.com/O=kingbj0429 organization"

 

Organization ์€ ์•„๋ฌด๊ฑฐ๋‚˜ ํ•ด์ฃผ์…”๋„ ์ƒ๊ด€ ์—†์ง€๋งŒ ๋ฐ˜๋“œ์‹œ CN(Common Name) ์€ ์‚ฌ์šฉํ•  ๋„๋ฉ”์ธ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์„œ

 

์ •์„์ ์œผ๋กœ ์ ‘๊ทผํ•ด๋ณด๋ฉด, ์šฐ์„  ๊ฐœ์ธํ‚ค์™€ CSR (Certificate Sigining Resquest) ๋ฅผ ์ƒ์„ฑํ•œ ํ›„, CA ๋ฅผ ํ†ตํ•ด์„œ CRT ๋ฅผ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Cert-Manager ์ด์šฉํ•˜๋Š” ํŽธ์ด ํ›จ์”ฌ ์ˆ˜์›”ํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ œ ์ƒ์„ฑํ•œ TLS ๋ฅผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์‹œํฌ๋ฆฟ ๋ฆฌ์†Œ์Šค๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

์ฐธ๊ณ ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ TLS ๋Š” ๋ชจ๋‘ ์‹œํฌ๋ฆฟ์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์ฐธ๊ณ 

k create -n istio-system secret tls kingbj0429-tls --key tls.key --cert tls.crt

 

์‹œํฌ๋ฆฟ์€ CLI ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑํ•ด์•ผ ์ธ์ฝ”๋”ฉ์œผ๋กœ ์ธํ•œ ์‹ค์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋ฐ˜๋“œ์‹œ istio-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

์ค€๋น„๋Š” ๋‹ค ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ์˜ˆ์ œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ฃ .

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway 
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: kingbj0429-tls
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - "*"
  gateways:
  - bookinfo-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        prefix: /static
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage
        port:
          number: 9080

 

.spec.servers[].tls ๋ฅผ ์ž ๊น ์„ค๋ช…ํ•˜์ž๋ฉด mode ๋Š” ๋ฐ˜๋“œ์‹œ SIMPLE ๋กœ ํ•˜๊ณ , credentialName ์€ ๋ฐฉ๊ธˆ ์ „ ์ƒ์„ฑํ•œ ์‹œํฌ๋ฆฟ์˜ ์ด๋ฆ„์œผ๋กœ ํ•ด์ค๋‹ˆ๋‹ค. ์‹œํฌ๋ฆฟ์€ istio-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ ์šฉํ–ˆ์ง€๋งŒ ์˜ˆ์ œ ๋ฆฌ์†Œ์Šค์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์•„๋ฌด๊ณณ์ด๋‚˜ ์ƒ๊ด€์—†์–ด์š”.

 

Gateway ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์—ฌ๊ธฐ ์ฐธ๊ณ 

VirtualService ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์—ฌ๊ธฐ ์ฐธ๊ณ 

 

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ ์˜ˆ์ œ๋ฅผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ๋ฐฐํฌํ•ด์ค๋‹ˆ๋‹ค. ์ด์Šคํ‹ฐ์˜ค์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ์˜ˆ์ œ ํŒŒ์ผ๋“ค์ด๋ฉฐ, TLS ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธํ•  ๋•Œ ํ•„์š”ํ•œ ํŒŒ๋“œ์ž…๋‹ˆ๋‹ค.

 

๋ฆฌ์†Œ์Šค ์ƒ์„ฑ๋„ ๋ชจ๋‘ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ TLS ๊ฐ€ ์ž˜ ์ ์šฉ๋˜์—ˆ๋Š” ์ง€ ํ™•์ธํ•ด๋ณด์ฃ .

 

์šฐ์„  ingressgateway ์˜ ํฌํŠธ๋ฅผ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค.

k get svc -n istio-system

 

์•„๋งˆ istio-ingressgateway ๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด TYPE ์ด LoadBalancer ์ผํ…๋ฐ ์ €๋Š” ๋กœ์ปฌ์—์„œ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— NodePort ๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๊ณ , ๊ฐ๊ฐ์˜ ํ”„๋กœํ† ์ฝœ์— ๋งž๋Š” ํƒ€๊ฒŸํฌํŠธ๋“ค์ด ์ง€์ • ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

istio-ingressgateway

 

TLS ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 443:30407 ๋กœ ์ ‘๊ทผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

์ € ๊ฐ™์€ ๊ฒฝ์šฐ ingressgateway ํŒŒ๋“œ๋Š” k8s-worker-1 ์— ๋ฐฐํฌ๋˜์–ด ์žˆ๊ณ , k8s-worker-1 ์˜ ip ๋Š” 192.168.0.127 ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ https://192.168.0.127:30407 ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋  ๊ฑฐ ๊ฐ™์•„์š”!

 

๋งค๋ฒˆ ์“ฐ๊ธฐ ๊ท€์ฐฎ์œผ๋‹ˆ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋“ฑ๋กํ•ด์ฃผ์—ˆ์–ด์š”.

export INGRESS_HOST=192.168.0.127 # istio-ingressgateway ๊ฐ€ ๋„์–ด์ ธ ์žˆ๋Š” ๋…ธ๋“œ์˜ ip
export SECURE_INGRESS_PORT=30407

 

๊ทธ๋Ÿผ ์ด์ œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด์ฃ .

curl https://kingbj0429.com:$SECURE_INGRESS_PORT/api/v1/products -k -v --resolve kingbj0429.com:$SECURE_INGRESS_PORT:$INGRESS_HOST

 

 curl ๋ช…๋ น์–ด ์˜ต์…˜์— ๋Œ€ํ•ด ์ž ๊น ์„ค๋ช…ํ•˜๋ฉด, 

-k : ์ธ์ฆ์„œ๊ฐ€ ์ง„์งœ์ธ์ง€, ๊ฐ€์งœ์ธ์ง€ ์‹ ๊ฒฝ ์•ˆ์”€

-v : verbose ๋กœ ๋””ํ…Œ์ผํ•œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์คŒ

--resolve : kingbj0429.com:$SECURE_INGRESS_PORT ๋กœ  ์˜ค๋Š” ๋„๋ฉ”์ธ ์งˆ์˜๋Š” $INGRESS_HOST ๋กœ ํ•ด์„ํ• ๊ฑฐ์ž„

 

์š”์ฒญ ๊ฒฐ๊ณผ

 

์„ฑ๊ณต์ ์œผ๋กœ ์‘๋‹ต์ด ์™”์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ง€๊ธˆ์œผ๋กœ๋Š” ๋ญ”๊ฐ€ ์‚ด์ง ์•„์‰ฌ์›Œ์š”. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘๊ทผํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด IP ๋กœ ์ ‘๊ทผํ•ด์•ผํ•ด์š”. ๋„๋ฉ”์ธ์ด ๊ฐ€์งœ์ด๋‹ˆ๊น์š”.

 

IP ๋ฅผ ์™ธ์šฐ๊ธฐ ๊ท€์ฐฎ์œผ๋‹ˆ ๋งฅ์˜ hosts ๋ฅผ ์ž ๊น ์†๋ด์ค„๊ฒŒ์š”.

sudo vim /etc/hosts

 

hosts ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  DNS ์˜ ์บ์‹ฑ์„ ์ง€์›๋‹ˆ๋‹ค.

sudo killall -HUP mDNSResponder

 

๊ทธ๋Ÿผ ์ด์ œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋„๋ฉ”์ธ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์š”!

 

 

์ธ์ฆ์„œ๊ฐ€ ๊ฐ€์งœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ ์š”ํ•จ์€ ์—†์–ด์ง€์ง€ ์•Š์ง€๋งŒ ์‹ค์ œ ์ธ์ฆ๋œ ๋„๋ฉ”์ธ์„ ๊ตฌ๋งคํ•˜๋ฉด ์ž˜ ๋™์ž‘ํ•  ๊ฒƒ ๊ฐ™๋„ค์š”!

 

 

์˜ค๋Š˜์€ Istio Ingressgateway ์— TLS ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿผ ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€!

๋ฐ˜์‘ํ˜•
profile on loading

Loading...