์ธ๊ทธ๋ ์ค(Ingress)
Kubernetes v1.19 [stable]
ํด๋ฌ์คํฐ ๋ด์ ์๋น์ค์ ๋ํ ์ธ๋ถ ์ ๊ทผ์ ๊ด๋ฆฌํ๋ API ์ค๋ธ์ ํธ์ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก HTTP๋ฅผ ๊ด๋ฆฌํจ.
์ธ๊ทธ๋ ์ค๋ ๋ถํ ๋ถ์ฐ, SSL ์ข ๋ฃ, ๋ช ์นญ ๊ธฐ๋ฐ์ ๊ฐ์ ํธ์คํ ์ ์ ๊ณตํ ์ ์๋ค.
์ฉ์ด
์ด ๊ฐ์ด๋๋ ์ฉ์ด์ ๋ช ํ์ฑ์ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค.
- ๋ ธ๋(Node): ํด๋ฌ์คํฐ์ ์ผ๋ถ์ด๋ฉฐ, ์ฟ ๋ฒ๋คํฐ์ค์ ์ํ ์์ปค ๋จธ์ .
- ํด๋ฌ์คํฐ(Cluster): ์ฟ ๋ฒ๋คํฐ์ค์์ ๊ด๋ฆฌ๋๋ ์ปจํ ์ด๋ํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ ธ๋ ์งํฉ. ์ด ์์์ ๋๋ถ๋ถ์ ์ผ๋ฐ์ ์ธ ์ฟ ๋ฒ๋คํฐ์ค ๋ฐฐํฌ์์ ํด๋ฌ์คํฐ์ ์ํ ๋ ธ๋๋ ํผ๋ธ๋ฆญ ์ธํฐ๋ท์ ์ผ๋ถ๊ฐ ์๋๋ค.
- ์์ง ๋ผ์ฐํฐ(Edge router): ํด๋ฌ์คํฐ์ ๋ฐฉํ๋ฒฝ ์ ์ฑ ์ ์ ์ฉํ๋ ๋ผ์ฐํฐ. ์ด๊ฒ์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ๋๋ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด์ ์ผ๋ถ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ดํธ์จ์ด์ผ ์ ์๋ค.
- ํด๋ฌ์คํฐ ๋คํธ์ํฌ(Cluster network): ์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํน ๋ชจ๋ธ์ ๋ฐ๋ผ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ํต์ ์ ์ฉ์ดํ๊ฒ ํ๋ ๋ ผ๋ฆฌ์ ๋๋ ๋ฌผ๋ฆฌ์ ๋งํฌ ์งํฉ.
- ์๋น์ค: ๋ ์ด๋ธ ์ ๋ ํฐ๋ฅผ ์ฌ์ฉํด์ ํ๋ ์งํฉ์ ์๋ณํ๋ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค. ๋ฌ๋ฆฌ ์ธ๊ธํ์ง ์์ผ๋ฉด ์๋น์ค๋ ํด๋ฌ์คํฐ ๋คํธ์ํฌ ๋ด์์๋ง ๋ผ์ฐํ ๊ฐ๋ฅํ ๊ฐ์ IP๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
์ธ๊ทธ๋ ์ค๋?
์ธ๊ทธ๋ ์ค๋ ํด๋ฌ์คํฐ ์ธ๋ถ์์ ํด๋ฌ์คํฐ ๋ด๋ถ ์๋น์ค๋ก HTTP์ HTTPS ๊ฒฝ๋ก๋ฅผ ๋ ธ์ถํ๋ค. ํธ๋ํฝ ๋ผ์ฐํ ์ ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค์ ์ ์๋ ๊ท์น์ ์ํด ์ปจํธ๋กค๋๋ค.
๋ค์์ ์ธ๊ทธ๋ ์ค๊ฐ ๋ชจ๋ ํธ๋ํฝ์ ํ๋์ ์๋น์ค๋ก ๋ณด๋ด๋ ๊ฐ๋จํ ์์์ด๋ค.
์ธ๊ทธ๋ ์ค๋ ์ธ๋ถ์์ ์๋น์ค๋ก ์ ์์ด ๊ฐ๋ฅํ URL, ๋ก๋ ๋ฐธ๋ฐ์ค ํธ๋ํฝ, SSL / TLS ์ข ๋ฃ ๊ทธ๋ฆฌ๊ณ ์ด๋ฆ-๊ธฐ๋ฐ์ ๊ฐ์ ํธ์คํ ์ ์ ๊ณตํ๋๋ก ๊ตฌ์ฑํ ์ ์๋ค. ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํด์ ์ธ๊ทธ๋ ์ค๋ฅผ ์ํํ ์ฑ ์์ด ์์ผ๋ฉฐ, ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋๋ฐ ๋์์ด ๋๋๋ก ์์ง ๋ผ์ฐํฐ ๋๋ ์ถ๊ฐ ํ๋ฐํธ ์๋๋ฅผ ๊ตฌ์ฑํ ์๋ ์๋ค.
์ธ๊ทธ๋ ์ค๋ ์์์ ํฌํธ ๋๋ ํ๋กํ ์ฝ์ ๋ ธ์ถ์ํค์ง ์๋๋ค. HTTP์ HTTPS ์ด์ธ์ ์๋น์ค๋ฅผ ์ธํฐ๋ท์ ๋ ธ์ถํ๋ ค๋ฉด ๋ณดํต Service.Type=NodePort ๋๋ Service.Type=LoadBalancer ์ ํ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ค.
์ ์ ์กฐ๊ฑด๋ค
์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๊ฐ ์์ด์ผ ์ธ๊ทธ๋ ์ค๋ฅผ ์ถฉ์กฑํ ์ ์๋ค. ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค๋ง ์์ฑํ๋ค๋ฉด ํจ๊ณผ๊ฐ ์๋ค.
ingress-nginx์ ๊ฐ์ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ฅผ ๋ฐฐํฌํด์ผ ํ ์๋ ์๋ค. ์ฌ๋ฌ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ ์ค์์ ์ ํํ ์๋ ์๋ค.
์ด์์ ์ผ๋ก, ๋ชจ๋ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ์ฐธ์กฐ ์ฌ์์ด ๋ง์์ผ ํ๋ค. ์ค์ ๋ก, ๋ค์ํ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์๋ํ๋ค.
์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค
์ต์ํ์ ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค ์์ :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath
pathType: Prefix
backend:
service:
name: test
port:
number: 80
๋ค๋ฅธ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ๊ทธ๋ ์ค์๋ apiVersion
, kind
, ๊ทธ๋ฆฌ๊ณ metadata
ํ๋๊ฐ ํ์ํ๋ค.
์ธ๊ทธ๋ ์ค ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ ํจํ
DNS ์๋ธ๋๋ฉ์ธ ์ด๋ฆ์ด์ด์ผ ํ๋ค.
์ค์ ํ์ผ์ ์์ฑ์ ๋ํ ์ผ๋ฐ์ ์ธ ๋ด์ฉ์ ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌํ๊ธฐ, ์ปจํ
์ด๋ ๊ตฌ์ฑํ๊ธฐ, ๋ฆฌ์์ค ๊ด๋ฆฌํ๊ธฐ๋ฅผ ์ฐธ์กฐํ๋ค.
์ธ๊ทธ๋ ์ค๋ ์ข
์ข
์ด๋
ธํ
์ด์
์ ์ด์ฉํด์ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ๋ฐ๋ผ ๋ช ๊ฐ์ง ์ต์
์ ๊ตฌ์ฑํ๋๋ฐ,
๊ทธ ์์๋ ์ฌ์์ฑ-ํ๊ฒ ์ด๋
ธํ
์ด์
์ด๋ค.
์๋ก ๋ค๋ฅธ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ์๋ก ๋ค๋ฅธ ์ด๋
ธํ
์ด์
์ ์ง์ํ๋ค.
์ง์๋๋ ์ด๋
ธํ
์ด์
์ ํ์ธํ๋ ค๋ฉด ์ ํํ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ์ค๋ช
์๋ฅผ ๊ฒํ ํ๋ค.
์ธ๊ทธ๋ ์ค ์ฌ์ ์๋ ๋ก๋ ๋ฐธ๋ฐ์ ๋๋ ํ๋ก์ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ํ์ํ ๋ชจ๋ ์ ๋ณด๊ฐ ์๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์, ๋ค์ด์ค๋ ์์ฒญ๊ณผ ์ผ์นํ๋ ๊ท์น ๋ชฉ๋ก์ ํฌํจํ๋ ๊ฒ์ด๋ค. ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค๋ HTTP(S) ํธ๋ํฝ์ ์ง์ํ๋ ๊ท์น๋ง ์ง์ํ๋ค.
ingressClassName
์ ์๋ตํ๋ ค๋ฉด, ๊ธฐ๋ณธ ์ธ๊ทธ๋ ์ค ํด๋์ค๊ฐ
์ ์๋์ด ์์ด์ผ ํ๋ค.
๋ช๋ช ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ๊ธฐ๋ณธ IngressClass
๊ฐ ์ ์๋์ด ์์ง ์์๋ ๋์ํ๋ค.
์๋ฅผ ๋ค์ด, Ingress-NGINX ์ปจํธ๋กค๋ฌ๋ --watch-ingress-without-class
ํ๋๊ทธ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ฑ๋ ์ ์๋ค.
ํ์ง๋ง ์๋์ ๋์ ์๋ ๊ฒ๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ IngressClass
๋ฅผ ๋ช
์ํ๋ ๊ฒ์
๊ถ์ฅํ๋ค.
์ธ๊ทธ๋ ์ค ๊ท์น
๊ฐ HTTP ๊ท์น์๋ ๋ค์์ ์ ๋ณด๊ฐ ํฌํจ๋๋ค.
- ์ ํ์ ํธ์คํธ. ์ด ์์์์๋, ํธ์คํธ๊ฐ ์ง์ ๋์ง ์๊ธฐ์ ์ง์ ๋ IP ์ฃผ์๋ฅผ ํตํด ๋ชจ๋ ์ธ๋ฐ์ด๋ HTTP ํธ๋ํฝ์ ๊ท์น์ด ์ ์ฉ ๋๋ค. ๋ง์ฝ ํธ์คํธ๊ฐ ์ ๊ณต๋๋ฉด(์, foo.bar.com), ๊ท์น์ด ํด๋น ํธ์คํธ์ ์ ์ฉ๋๋ค.
- ๊ฒฝ๋ก ๋ชฉ๋ก (์,
/testpath
)์๋ ๊ฐ๊ฐservice.name
๊ณผservice.port.name
๋๋service.port.number
๊ฐ ์ ์๋์ด ์๋ ๊ด๋ จ ๋ฐฑ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ํธ๋ํฝ์ ์ฐธ์กฐ๋ ์๋น์ค๋ก ๋ณด๋ด๊ธฐ ์ ์ ํธ์คํธ์ ๊ฒฝ๋ก๊ฐ ๋ชจ๋ ์์ ์์ฒญ์ ๋ด์ฉ๊ณผ ์ผ์นํด์ผ ํ๋ค. - ๋ฐฑ์๋๋ ์๋น์ค ๋ฌธ์ ๋๋ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ๋ฐฑ์๋์ ์ค๋ช ๋ ๋ฐ์ ๊ฐ์ด ์๋น์ค์ ํฌํธ ์ด๋ฆ์ ์กฐํฉ์ด๋ค. ํธ์คํธ์ ๊ท์น ๊ฒฝ๋ก๊ฐ ์ผ์นํ๋ ์ธ๊ทธ๋ ์ค์ ๋ํ HTTP(์ HTTPS) ์์ฒญ์ ๋ฐฑ์๋ ๋ชฉ๋ก์ผ๋ก ์ ์ก๋๋ค.
defaultBackend
๋ ์ข
์ข
์ฌ์์ ๊ฒฝ๋ก์ ์ผ์นํ์ง ์๋ ์๋น์ค์ ๋ํ ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ก ์ธ๊ทธ๋ ์ค
์ปจํธ๋กค๋ฌ์ ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
DefaultBackend
๊ท์น์ด ์๋ ์ธ๊ทธ๋ ์ค๋ ๋ชจ๋ ํธ๋ํฝ์ ๋จ์ผ ๊ธฐ๋ณธ ๋ฐฑ์๋๋ก ์ ์กํ๋ค. defaultBackend
๋ ์ผ๋ฐ์ ์ผ๋ก
์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ๊ตฌ์ฑ ์ต์
์ด๋ฉฐ, ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค์ ์ง์ ๋์ด ์์ง ์๋ค.
๋ง์ฝ ์ธ๊ทธ๋ ์ค ์ค๋ธ์ ํธ์ HTTP ์์ฒญ๊ณผ ์ผ์นํ๋ ํธ์คํธ ๋๋ ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด, ํธ๋ํฝ์ ๊ธฐ๋ณธ ๋ฐฑ์๋๋ก ๋ผ์ฐํ ๋๋ค.
๋ฆฌ์์ค ๋ฐฑ์๋
Resource
๋ฐฑ์๋๋ ์ธ๊ทธ๋ ์ค ์ค๋ธ์ ํธ์ ๋์ผํ ๋ค์์คํ์ด์ค ๋ด์ ์๋
๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค์ ๋ํ ObjectRef์ด๋ค. Resource
๋ ์๋น์ค์
์ํธ ๋ฐฐํ์ ์ธ ์ค์ ์ด๋ฉฐ, ๋ ๋ค ์ง์ ํ๋ฉด ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๋ค. Resource
๋ฐฑ์๋์ ์ผ๋ฐ์ ์ธ ์ฉ๋๋ ์ ์ ์์ฐ์ด ์๋ ์ค๋ธ์ ํธ ์คํ ๋ฆฌ์ง ๋ฐฑ์๋๋ก ๋ฐ์ดํฐ๋ฅผ
์์ ํ๋ ๊ฒ์ด๋ค.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-resource-backend
spec:
defaultBackend:
resource:
apiGroup: k8s.example.com
kind: StorageBucket
name: static-assets
rules:
- http:
paths:
- path: /icons
pathType: ImplementationSpecific
backend:
resource:
apiGroup: k8s.example.com
kind: StorageBucket
name: icon-assets
์์ ์ธ๊ทธ๋ ์ค๋ฅผ ์์ฑํ ํ, ๋ค์์ ๋ช ๋ น์ผ๋ก ํ์ธํ ์ ์๋ค.
kubectl describe ingress ingress-resource-backend
Name: ingress-resource-backend
Namespace: default
Address:
Default backend: APIGroup: k8s.example.com, Kind: StorageBucket, Name: static-assets
Rules:
Host Path Backends
---- ---- --------
*
/icons APIGroup: k8s.example.com, Kind: StorageBucket, Name: icon-assets
Annotations: <none>
Events: <none>
๊ฒฝ๋ก ์ ํ
์ธ๊ทธ๋ ์ค์ ๊ฐ ๊ฒฝ๋ก์๋ ํด๋น ๊ฒฝ๋ก ์ ํ์ด ์์ด์ผ ํ๋ค. ๋ช
์์
pathType
์ ํฌํจํ์ง ์๋ ๊ฒฝ๋ก๋ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจํ๋ค. ์ง์๋๋
๊ฒฝ๋ก ์ ํ์ ์ธ ๊ฐ์ง์ด๋ค.
-
ImplementationSpecific
: ์ด ๊ฒฝ๋ก ์ ํ์ ์ผ์น ์ฌ๋ถ๋ IngressClass์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ์ด๋ฅผ ๊ตฌํํ ๋ ๋ณ๋pathType
์ผ๋ก ์ฒ๋ฆฌํ๊ฑฐ๋,Prefix
๋๋Exact
๊ฒฝ๋ก ์ ํ๊ณผ ๊ฐ์ด ๋์ผํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค. -
Exact
: URL ๊ฒฝ๋ก์ ๋์๋ฌธ์๋ฅผ ์๊ฒฉํ๊ฒ ์ผ์น์ํจ๋ค. -
Prefix
: URL ๊ฒฝ๋ก์ ์ ๋์ฌ๋ฅผ/
๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํ ๊ฐ๊ณผ ์ผ์น์ํจ๋ค. ์ผ์น๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๊ณ , ์์๋ณ๋ก ๊ฒฝ๋ก ์์์ ๋ํด ์ํํ๋ค. ๋ชจ๋ p ๊ฐ ์์ฒญ ๊ฒฝ๋ก์ ์์๋ณ ์ ๋์ฌ๊ฐ p ์ธ ๊ฒฝ์ฐ ์์ฒญ์ p ๊ฒฝ๋ก์ ์ผ์นํ๋ค.์ฐธ๊ณ : ๊ฒฝ๋ก์ ๋ง์ง๋ง ์์๊ฐ ์์ฒญ ๊ฒฝ๋ก์ ์๋ ๋ง์ง๋ง ์์์ ํ์ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ์๋ ์ผ์นํ์ง ์๋๋ค(์์:/foo/bar
๋/foo/bar/baz
์ ์ผ์นํ์ง๋ง,/foo/barbaz
์๋ ์ผ์นํ์ง ์๋๋ค).
์์
์ข ๋ฅ | ๊ฒฝ๋ก | ์์ฒญ ๊ฒฝ๋ก | ์ผ์น ์ฌ๋ถ |
---|---|---|---|
Prefix | / |
(๋ชจ๋ ๊ฒฝ๋ก) | ์ |
Exact | /foo |
/foo |
์ |
Exact | /foo |
/bar |
์๋์ค |
Exact | /foo |
/foo/ |
์๋์ค |
Exact | /foo/ |
/foo |
์๋์ค |
Prefix | /foo |
/foo , /foo/ |
์ |
Prefix | /foo/ |
/foo , /foo/ |
์ |
Prefix | /aaa/bb |
/aaa/bbb |
์๋์ค |
Prefix | /aaa/bbb |
/aaa/bbb |
์ |
Prefix | /aaa/bbb/ |
/aaa/bbb |
์, ๋ง์ง๋ง ์ฌ๋์ ๋ฌด์ํจ |
Prefix | /aaa/bbb |
/aaa/bbb/ |
์, ๋ง์ง๋ง ์ฌ๋์ ์ผ์นํจ |
Prefix | /aaa/bbb |
/aaa/bbb/ccc |
์, ํ์ ๊ฒฝ๋ก ์ผ์นํจ |
Prefix | /aaa/bbb |
/aaa/bbbxyz |
์๋์ค, ๋ฌธ์์ด ์ ๋์ฌ ์ผ์นํ์ง ์์ |
Prefix | / , /aaa |
/aaa/ccc |
์, /aaa ์ ๋์ฌ ์ผ์นํจ |
Prefix | / , /aaa , /aaa/bbb |
/aaa/bbb |
์, /aaa/bbb ์ ๋์ฌ ์ผ์นํจ |
Prefix | / , /aaa , /aaa/bbb |
/ccc |
์, / ์ ๋์ฌ ์ผ์นํจ |
Prefix | /aaa |
/ccc |
์๋์ค, ๊ธฐ๋ณธ ๋ฐฑ์๋ ์ฌ์ฉํจ |
Mixed | /foo (Prefix), /foo (Exact) |
/foo |
์, Exact ์ ํธํจ |
๋ค์ค ์ผ์น
๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ธ๊ทธ๋ ์ค์ ์ฌ๋ฌ ๊ฒฝ๋ก๊ฐ ์์ฒญ๊ณผ ์ผ์นํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ์ฅ ๊ธด ์ผ์นํ๋ ๊ฒฝ๋ก๊ฐ ์ฐ์ ํ๊ฒ ๋๋ค. ๋ ๊ฐ์ ๊ฒฝ๋ก๊ฐ ์ฌ์ ํ ๋์ผํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ ์ ๋์ฌ(prefix) ๊ฒฝ๋ก ์ ํ๋ณด๋ค ์ ํํ(exact) ๊ฒฝ๋ก ์ ํ์ ๊ฐ์ง ๊ฒฝ๋ก๊ฐ ์ฌ์ฉ ๋๋ค.
ํธ์คํธ๋ค์ ์์ผ๋์นด๋
ํธ์คํธ๋ ์ ํํ ์ผ์น(์: "foo.bar.com
") ๋๋ ์์ผ๋์นด๋(์:
"* .foo.com
")์ผ ์ ์๋ค. ์ ํํ ์ผ์น๋ฅผ ์ํด์๋ HTTP host
ํค๋๊ฐ
host
ํ๋์ ์ผ์นํด์ผ ํ๋ค. ์์ผ๋์นด๋ ์ผ์น๋ฅผ ์ํด์๋ HTTP host
ํค๋๊ฐ
์์ผ๋์นด๋ ๊ท์น์ ์ ๋ฏธ์ฌ์ ๋์ผํด์ผ ํ๋ค.
ํธ์คํธ | ํธ์คํธ ํค๋ | ์ผ์น ์ฌ๋ถ |
---|---|---|
*.foo.com |
bar.foo.com |
๊ณต์ ์ ๋ฏธ์ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ผ์นํจ |
*.foo.com |
baz.bar.foo.com |
์ผ์นํ์ง ์์, ์์ผ๋์นด๋๋ ๋จ์ผ DNS ๋ ์ด๋ธ๋ง ํฌํจํจ |
*.foo.com |
foo.com |
์ผ์นํ์ง ์์, ์์ผ๋์นด๋๋ ๋จ์ผ DNS ๋ ์ด๋ธ๋ง ํฌํจํจ |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-wildcard-host
spec:
rules:
- host: "foo.bar.com"
http:
paths:
- pathType: Prefix
path: "/bar"
backend:
service:
name: service1
port:
number: 80
- host: "*.foo.com"
http:
paths:
- pathType: Prefix
path: "/foo"
backend:
service:
name: service2
port:
number: 80
์ธ๊ทธ๋ ์ค ํด๋์ค
์ธ๊ทธ๋ ์ค๋ ์๋ก ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ์ ์ํด ๊ตฌํ๋ ์ ์์ผ๋ฉฐ, ์ข ์ข ๋ค๋ฅธ ๊ตฌ์ฑ์ผ๋ก ๊ตฌํ๋ ์ ์๋ค. ๊ฐ ์ธ๊ทธ๋ ์ค์์๋ ํด๋์ค๋ฅผ ๊ตฌํํด์ผํ๋ ์ปจํธ๋กค๋ฌ ์ด๋ฆ์ ํฌํจํ์ฌ ์ถ๊ฐ ๊ตฌ์ฑ์ด ํฌํจ๋ IngressClass ๋ฆฌ์์ค์ ๋ํ ์ฐธ์กฐ ํด๋์ค๋ฅผ ์ง์ ํด์ผ ํ๋ค.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb
spec:
controller: example.com/ingress-controller
parameters:
apiGroup: k8s.example.com
kind: IngressParameters
name: external-lb
์ธ๊ทธ๋ ์คํด๋์ค์ .spec.parameters
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ
ํด๋น ์ธ๊ทธ๋ ์คํด๋์ค์ ์ฐ๊ด์๋ ํ๊ฒฝ ์ค์ ์ ์ ๊ณตํ๋ ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ์ ์์ธํ ํ์
์
์ธ๊ทธ๋ ์คํด๋์ค์ .spec.parameters
ํ๋์ ๋ช
์ํ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ์ข
๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
์ธ๊ทธ๋ ์คํด๋์ค ๋ฒ์
์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ์ข ๋ฅ์ ๋ฐ๋ผ, ํด๋ฌ์คํฐ ๋ฒ์๋ก ์ค์ ํ ํ๋ผ๋ฏธํฐ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์๋ ์๊ณ , ๋๋ ํ ๋ค์์คํ์ด์ค์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ ์๋ค.
์ธ๊ทธ๋ ์คํด๋์ค ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ ๋ฒ์๋ ํด๋ฌ์คํฐ ๋ฒ์์ด๋ค.
.spec.parameters
ํ๋๋ง ์ค์ ํ๊ณ .spec.parameters.scope
ํ๋๋ ์ง์ ํ์ง ์๊ฑฐ๋,
.spec.parameters.scope
ํ๋๋ฅผ Cluster
๋ก ์ง์ ํ๋ฉด,
์ธ๊ทธ๋ ์คํด๋์ค๋ ํด๋ฌ์คํฐ ๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํ๋ค.
ํ๋ผ๋ฏธํฐ์ kind
(+apiGroup
)๋
ํด๋ฌ์คํฐ ๋ฒ์์ API (์ปค์คํ
๋ฆฌ์์ค์ผ ์๋ ์์) ๋ฅผ ์ฐธ์กฐํ๋ฉฐ,
ํ๋ผ๋ฏธํฐ์ name
์
ํด๋น API์ ๋ํ ํน์ ํด๋ฌ์คํฐ ๋ฒ์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb-1
spec:
controller: example.com/ingress-controller
parameters:
# ์ด ์ธ๊ทธ๋ ์คํด๋์ค์ ๋ํ ํ๋ผ๋ฏธํฐ๋ "external-config-1" ๋ผ๋
# ClusterIngressParameter(API ๊ทธ๋ฃน k8s.example.net)์ ๊ธฐ์ฌ๋์ด ์๋ค.
# ์ด ์ ์๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ
# ํด๋ฌ์คํฐ ๋ฒ์์ ํ๋ผ๋ฏธํฐ ๋ฆฌ์์ค๋ฅผ ๊ฒ์ํ๋๋ก ํ๋ค.
scope: Cluster
apiGroup: k8s.example.net
kind: ClusterIngressParameter
name: external-config-1
Kubernetes v1.23 [stable]
.spec.parameters
ํ๋๋ฅผ ์ค์ ํ๊ณ
.spec.parameters.scope
ํ๋๋ฅผ Namespace
๋ก ์ง์ ํ๋ฉด,
์ธ๊ทธ๋ ์คํด๋์ค๋ ๋ค์์คํ์ด์ค ๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํ๋ค.
์ฌ์ฉํ๊ณ ์ ํ๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ํ ๋ค์์คํ์ด์ค๋ฅผ
.spec.parameters
์ namespace
ํ๋์ ์ค์ ํด์ผ ํ๋ค.
ํ๋ผ๋ฏธํฐ์ kind
(+apiGroup
)๋
๋ค์์คํ์ด์ค ๋ฒ์์ API (์: ์ปจํผ๊ทธ๋งต) ๋ฅผ ์ฐธ์กฐํ๋ฉฐ,
ํ๋ผ๋ฏธํฐ์ name
์
namespace
์ ๋ช
์ํ ๋ค์์คํ์ด์ค์ ํน์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๋ค์์คํ์ด์ค ๋ฒ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ์ฌ, ํด๋ฌ์คํฐ ์ด์์๊ฐ ์ํฌ๋ก๋์ ์ฌ์ฉ๋๋ ํ๊ฒฝ ์ค์ (์: ๋ก๋ ๋ฐธ๋ฐ์ ์ค์ , API ๊ฒ์ดํธ์จ์ด ์ ์)์ ๋ํ ์ ์ด๋ฅผ ์์ํ ์ ์๋ค. ํด๋ฌ์คํฐ ๋ฒ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ค์ ์ค ํ๋์ ํด๋น๋๋ค.
- ๋ค๋ฅธ ํ์ ์๋ก์ด ํ๊ฒฝ ์ค์ ๋ณ๊ฒฝ์ ์ ์ฉํ๋ ค๊ณ ํ ๋๋ง๋ค ํด๋ฌ์คํฐ ์ด์ ํ์ด ๋งค๋ฒ ์น์ธ์ ํด์ผ ํ๋ค. ๋๋,
- ์ ํ๋ฆฌ์ผ์ด์ ํ์ด ํด๋ฌ์คํฐ ๋ฒ์ ํ๋ผ๋ฏธํฐ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ํ๋ RBAC ๋กค, ๋ฐ์ธ๋ฉ ๋ฑ์ ํน๋ณ ์ ๊ทผ ์ ์ด๋ฅผ ํด๋ฌ์คํฐ ์ด์์๊ฐ ์ ์ํด์ผ ํ๋ค.
์ธ๊ทธ๋ ์คํด๋์ค API ์์ ์ ํญ์ ํด๋ฌ์คํฐ ๋ฒ์์ด๋ค.
๋ค์์คํ์ด์ค ๋ฒ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฐธ์กฐํ๋ ์ธ๊ทธ๋ ์คํด๋์ค ์์๊ฐ ๋ค์๊ณผ ๊ฐ๋ค.
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb-2
spec:
controller: example.com/ingress-controller
parameters:
# ์ด ์ธ๊ทธ๋ ์คํด๋์ค์ ๋ํ ํ๋ผ๋ฏธํฐ๋
# "external-configuration" ํ๊ฒฝ ์ค์ ๋ค์์คํ์ด์ค์ ์๋
# "external-config" ๋ผ๋ IngressParameter(API ๊ทธ๋ฃน k8s.example.com)์ ๊ธฐ์ฌ๋์ด ์๋ค.
scope: Namespace
apiGroup: k8s.example.com
kind: IngressParameter
namespace: external-configuration
name: external-config
์ฌ์ฉ์ค๋จ(Deprecated) ์ด๋ ธํ ์ด์
์ฟ ๋ฒ๋คํฐ์ค 1.18์ IngressClass ๋ฆฌ์์ค ๋ฐ ingressClassName
ํ๋๊ฐ ์ถ๊ฐ๋๊ธฐ
์ ์ ์ธ๊ทธ๋ ์ค ํด๋์ค๋ ์ธ๊ทธ๋ ์ค์์
kubernetes.io/ingress.class
์ด๋
ธํ
์ด์
์ผ๋ก ์ง์ ๋์๋ค. ์ด ์ด๋
ธํ
์ด์
์
๊ณต์์ ์ผ๋ก ์ ์๋ ๊ฒ์ ์๋์ง๋ง, ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์์ ๋๋ฆฌ ์ง์๋์์๋ค.
์ธ๊ทธ๋ ์ค์ ์ต์ ingressClassName
ํ๋๋ ํด๋น ์ด๋
ธํ
์ด์
์
๋์ฒดํ์ง๋ง, ์ง์ ์ ์ผ๋ก ํด๋นํ๋ ๊ฒ์ ์๋๋ค. ์ด๋
ธํ
์ด์
์ ์ผ๋ฐ์ ์ผ๋ก
์ธ๊ทธ๋ ์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ์ด๋ฆ์ ์ฐธ์กฐํ๋ ๋ฐ ์ฌ์ฉ๋์์ง๋ง,
์ด ํ๋๋ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ์ด๋ฆ์ ํฌํจํ๋ ์ถ๊ฐ ์ธ๊ทธ๋ ์ค ๊ตฌ์ฑ์ด
ํฌํจ๋ ์ธ๊ทธ๋ ์ค ํด๋์ค ๋ฆฌ์์ค์ ๋ํ ์ฐธ์กฐ์ด๋ค.
๊ธฐ๋ณธ IngressClass
ํน์ IngressClass๋ฅผ ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ํ์ํ ์ ์๋ค. IngressClass
๋ฆฌ์์ค์์ ingressclass.kubernetes.io/is-default-class
๋ฅผ true
๋ก
์ค์ ํ๋ฉด ingressClassName
ํ๋๊ฐ ์ง์ ๋์ง ์์
์ ์ธ๊ทธ๋ ์ค์๊ฒ ๊ธฐ๋ณธ IngressClass๊ฐ ํ ๋น๋๋ค.
ingressClassName
์ด ์ง์ ๋์ง ์์
์ ์ธ๊ทธ๋ ์ค ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ์ ์๋ค. ํด๋ฌ์คํฐ์์ ์ต๋ 1๊ฐ์ IngressClass๊ฐ
๊ธฐ๋ณธ๊ฐ์ผ๋ก ํ์ํ๋๋ก ํด์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋ช๋ช ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ๊ธฐ๋ณธ IngressClass
๊ฐ ์ ์๋์ด ์์ง ์์๋ ๋์ํ๋ค.
์๋ฅผ ๋ค์ด, Ingress-NGINX ์ปจํธ๋กค๋ฌ๋ --watch-ingress-without-class
ํ๋๊ทธ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ฑ๋ ์ ์๋ค.
ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ IngressClass
๋ฅผ ๋ช
์ํ๋ ๊ฒ์
๊ถ์ฅํ๋ค.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
labels:
app.kubernetes.io/component: controller
name: nginx-example
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: k8s.io/ingress-nginx
์ธ๊ทธ๋ ์ค ์ ํ๋ค
๋จ์ผ ์๋น์ค๋ก ์ง์๋๋ ์ธ๊ทธ๋ ์ค
๋จ์ผ ์๋น์ค๋ฅผ ๋ ธ์ถํ ์ ์๋ ๊ธฐ์กด ์ฟ ๋ฒ๋คํฐ์ค ๊ฐ๋ ์ด ์๋ค (๋์์ ๋ณธ๋ค). ์ธ๊ทธ๋ ์ค์ ๊ท์น ์์ด ๊ธฐ๋ณธ ๋ฐฑ์๋ ๋ฅผ ์ง์ ํด์ ์ด๋ฅผ ์ํํ ์ ์๋ค.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
spec:
defaultBackend:
service:
name: test
port:
number: 80
๋ง์ฝ kubectl apply -f
๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๋ค๋ฉด ์ถ๊ฐํ ์ธ๊ทธ๋ ์ค์
์ํ๋ฅผ ๋ณผ ์ ์์ด์ผ ํ๋ค.
kubectl get ingress test-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
test-ingress external-lb * 203.0.113.123 80 59s
์ฌ๊ธฐ์ 203.0.113.123
๋ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๊ฐ ์ธ๊ทธ๋ ์ค๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํด
ํ ๋นํ IP ์ด๋ค.
<pending>
์ผ๋ก ํ์๋๋ค.
๊ฐ๋จํ ํฌ์์(fanout)
ํฌ์์ ๊ตฌ์ฑ์ HTTP URI์์ ์์ฒญ๋ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๋จ์ผ IP ์ฃผ์์์ 1๊ฐ ์ด์์ ์๋น์ค๋ก ํธ๋ํฝ์ ๋ผ์ฐํ ํ๋ค. ์ธ๊ทธ๋ ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก๋ ๋ฐธ๋ฐ์์ ์๋ฅผ ์ต์๋ก ์ ์งํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ ์ธ๊ทธ๋ ์ค๊ฐ ํ์ํ๋ค.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple-fanout-example
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: service1
port:
number: 4200
- path: /bar
pathType: Prefix
backend:
service:
name: service2
port:
number: 8080
kubectl apply -f
๋ฅผ ์ฌ์ฉํด์ ์ธ๊ทธ๋ ์ค๋ฅผ ์์ฑ ํ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
kubectl describe ingress simple-fanout-example
Name: simple-fanout-example
Namespace: default
Address: 178.91.123.132
Default backend: default-http-backend:80 (10.8.2.3:8080)
Rules:
Host Path Backends
---- ---- --------
foo.bar.com
/foo service1:4200 (10.8.0.90:4200)
/bar service2:8080 (10.8.0.91:8080)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD 22s loadbalancer-controller default/test
์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ์๋น์ค(service1
, service2
)๊ฐ ์กด์ฌํ๋ ํ,
์ธ๊ทธ๋ ์ค๋ฅผ ๋ง์กฑ์ํค๋ ํน์ ํ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํ๋ก๋น์ ๋ํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด, ์ฃผ์ ํ๋์์ ๋ก๋ ๋ฐธ๋ฐ์์ ์ฃผ์๋ฅผ
๋ณผ ์ ์๋ค.
์ด๋ฆ ๊ธฐ๋ฐ์ ๊ฐ์ ํธ์คํ
์ด๋ฆ ๊ธฐ๋ฐ์ ๊ฐ์ ํธ์คํธ๋ ๋์ผํ IP ์ฃผ์์์ ์ฌ๋ฌ ํธ์คํธ ์ด๋ฆ์ผ๋ก HTTP ํธ๋ํฝ์ ๋ผ์ฐํ ํ๋ ๊ฒ์ ์ง์ํ๋ค.
๋ค์ ์ธ๊ทธ๋ ์ค๋ ํธ์คํธ ํค๋์ ๊ธฐ๋ฐํ ์์ฒญ์ ๋ผ์ฐํ ํ๊ธฐ ์ํด ๋ท๋จ์ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์๋ ค์ค๋ค.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: foo.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
- host: bar.foo.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service2
port:
number: 80
๋ง์ฝ ๊ท์น์ ์ ์๋ ํธ์คํธ ์์ด ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ, ์ด๋ฆ ๊ธฐ๋ฐ ๊ฐ์ ํธ์คํธ๊ฐ ์์ด๋ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ IP ์ฃผ์์ ๋ํ ์น ํธ๋ํฝ์ ์ผ์น ์ํฌ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ ์ธ๊ทธ๋ ์ค๋ first.bar.com
์ ์์ฒญ๋ ํธ๋ํฝ์
service1
๋ก, second.bar.com
๋ service2
๋ก, ๊ทธ๋ฆฌ๊ณ ์์ฒญ ํค๋๊ฐ first.bar.com
๋๋ second.bar.com
์ ํด๋น๋์ง ์๋ ๋ชจ๋ ํธ๋ํฝ์ service3
๋ก ๋ผ์ฐํ
ํ๋ค.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: name-virtual-host-ingress-no-third-host
spec:
rules:
- host: first.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
- host: second.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service2
port:
number: 80
- http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service3
port:
number: 80
TLS
TLS ๊ฐ์ธ ํค ๋ฐ ์ธ์ฆ์๊ฐ ํฌํจ๋ ์ํฌ๋ฆฟ(Secret)์
์ง์ ํด์ ์ธ๊ทธ๋ ์ค๋ฅผ ๋ณดํธํ ์ ์๋ค. ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค๋
๋จ์ผ TLS ํฌํธ์ธ 443๋ง ์ง์ํ๊ณ ์ธ๊ทธ๋ ์ค ์ง์ ์์ TLS ์ข
๋ฃ๋ฅผ
๊ฐ์ ํ๋ค(์๋น์ค ๋ฐ ํด๋น ํ๋์ ๋ํ ํธ๋ํฝ์ ์ผ๋ฐ ํ
์คํธ์).
์ธ๊ทธ๋ ์ค์ TLS ๊ตฌ์ฑ ์น์
์์ ๋ค๋ฅธ ํธ์คํธ๋ฅผ ์ง์ ํ๋ฉด, SNI TLS ํ์ฅ์ ํตํด
์ง์ ๋ ํธ์คํธ์ด๋ฆ์ ๋ฐ๋ผ ๋์ผํ ํฌํธ์์ ๋ฉํฐํ๋ ์ฑ
๋๋ค(์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๊ฐ SNI๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ). TLS secret์๋
tls.crt
์ tls.key
๋ผ๋ ์ด๋ฆ์ ํค๊ฐ ์์ด์ผ ํ๊ณ , ์ฌ๊ธฐ์๋ TLS์ ์ฌ์ฉํ ์ธ์ฆ์์
๊ฐ์ธ ํค๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
kind: Secret
metadata:
name: testsecret-tls
namespace: default
data:
tls.crt: base64 encoded cert
tls.key: base64 encoded key
type: kubernetes.io/tls
์ธ๊ทธ๋ ์ค์์ ์ํฌ๋ฆฟ์ ์ฐธ์กฐํ๋ฉด ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๊ฐ TLS๋ฅผ ์ฌ์ฉํ์ฌ
ํด๋ผ์ด์ธํธ์์ ๋ก๋ ๋ฐธ๋ฐ์๋ก ์ฑ๋์ ๋ณดํธํ๋๋ก ์ง์ํ๋ค. ์์ฑํ
TLS ์ํฌ๋ฆฟ์ด https-example.foo.com
์ ์ ๊ทํ ๋ ๋๋ฉ์ธ ์ด๋ฆ(FQDN)์ด๋ผ๊ณ
ํ๋ ์ผ๋ฐ ์ด๋ฆ(CN)์ ํฌํจํ๋ ์ธ์ฆ์์์ ์จ ๊ฒ์ธ์ง ํ์ธํด์ผ ํ๋ค.
tls
์น์
์ hosts
๋ rules
์น์
์ host
์ ๋ช
์์ ์ผ๋ก ์ผ์นํด์ผ
ํ๋ค.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-example-ingress
spec:
tls:
- hosts:
- https-example.foo.com
secretName: testsecret-tls
rules:
- host: https-example.foo.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service1
port:
number: 80
๋ก๋ ๋ฐธ๋ฐ์ฑ
์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ, ๋ฐฑ์๋ ๊ฐ์ค์น ๊ตฌ์ฑํ ๋ฑ ๋ชจ๋ ์ธ๊ทธ๋ ์ค์ ์ ์ฉ๋๋ ์ผ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ ์ฑ ์ค์ ์ผ๋ก ๋ถํธ์คํธ๋ฉ๋๋ค. ๋ณด๋ค ์ง๋ณด๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๊ฐ๋ (์: ์ง์์ ์ธ ์ธ์ , ๋์ ๊ฐ์ค์น)์ ์์ง ์ธ๊ทธ๋ ์ค๋ฅผ ํตํด ๋ ธ์ถ๋์ง ์๋๋ค. ๋์ ์๋น์ค์ ์ฌ์ฉ๋๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ป์ ์ ์๋ค.
๋ํ, ํฌ์ค ์ฒดํฌ๋ฅผ ์ธ๊ทธ๋ ์ค๋ฅผ ํตํด ์ง์ ๋ ธ์ถ๋์ง ์๋๋ผ๋, ์ฟ ๋ฒ๋คํฐ์ค์๋ ์ค๋น ์ํ ํ๋ก๋ธ์ ๊ฐ์ ๋์ผํ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ๋ณ๋ ฌ ๊ฐ๋ ์ด ์๋ค๋ ์ ๋ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์๋ค. ์ปจํธ๋กค๋ฌ ๋ณ ์ค๋ช ์๋ฅผ ๊ฒํ ํ์ฌ ํฌ์ค ์ฒดํฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ๋ค(์: nginx, ๋๋ GCE).
์ธ๊ทธ๋ ์ค ์ ๋ฐ์ดํธ
๊ธฐ์กด ์ธ๊ทธ๋ ์ค๋ฅผ ์ ๋ฐ์ดํธํด์ ์ ํธ์คํธ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด, ๋ฆฌ์์ค๋ฅผ ํธ์งํด์ ํธ์คํธ๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
kubectl describe ingress test
Name: test
Namespace: default
Address: 178.91.123.132
Default backend: default-http-backend:80 (10.8.2.3:8080)
Rules:
Host Path Backends
---- ---- --------
foo.bar.com
/foo service1:80 (10.8.0.90:80)
Annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD 35s loadbalancer-controller default/test
kubectl edit ingress test
YAML ํ์์ ๊ธฐ์กด ๊ตฌ์ฑ์ด ์๋ ํธ์ง๊ธฐ๊ฐ ๋ํ๋๋ค. ์ ํธ์คํธ๋ฅผ ํฌํจํ๋๋ก ์์ ํ๋ค.
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
service:
name: service1
port:
number: 80
path: /foo
pathType: Prefix
- host: bar.baz.com
http:
paths:
- backend:
service:
name: service2
port:
number: 80
path: /foo
pathType: Prefix
..
๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํ ํ, kubectl์ API ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ฉฐ, ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์๊ฒ๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ฌ๊ตฌ์ฑํ๋๋ก ์ง์ํ๋ค.
์ด๊ฒ์ ํ์ธํ๋ค.
kubectl describe ingress test
Name: test
Namespace: default
Address: 178.91.123.132
Default backend: default-http-backend:80 (10.8.2.3:8080)
Rules:
Host Path Backends
---- ---- --------
foo.bar.com
/foo service1:80 (10.8.0.90:80)
bar.baz.com
/foo service2:80 (10.8.0.91:80)
Annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD 45s loadbalancer-controller default/test
์์ ๋ ์ธ๊ทธ๋ ์ค YAML ํ์ผ์ kubectl replace -f
๋ฅผ ํธ์ถํด์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
๊ฐ์ฉ์ฑ ์์ญ์ ์ ์ฒด์์์ ์คํจ
์ฅ์ ๋๋ฉ์ธ์ ํธ๋ํฝ์ ๋ถ์ฐ์ํค๋ ๊ธฐ์ ์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ง๋ค ๋ค๋ฅด๋ค. ์์ธํ ๋ด์ฉ์ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ ์ค๋ช ์๋ฅผ ํ์ธํ๋ค.
๋์
์ฌ์ฉ์๋ ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค๋ฅผ ์ง์ ์ ์ผ๋ก ํฌํจํ์ง ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์๋น์ค๋ฅผ ๋ ธ์ถํ ์ ์๋ค.
- Service.Type=LoadBalancer ์ฌ์ฉ.
- Service.Type=NodePort ์ฌ์ฉ.
๋ค์ ๋ด์ฉ
- ์ธ๊ทธ๋ ์ค API์ ๋ํด ๋ฐฐ์ฐ๊ธฐ
- ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ๋ํด ๋ฐฐ์ฐ๊ธฐ
- NGINX ์ปจํธ๋กค๋ฌ๋ก Minikube์์ ์ธ๊ทธ๋ ์ค ๊ตฌ์ฑํ๊ธฐ