Last updated
Was this helpful?
Last updated
Was this helpful?
Kubernetesμ Ingressμ λν΄ μμ보μμ
Reference:
μΌλ°μ μΌλ‘ Network trafficμ ingress
μ engress
λ‘ κ΅¬λΆλλ€
Ingressλ μΈλΆλ‘λΆν° μλ² λ΄λΆλ‘ μ μ λλ network traffic
Engressλ μλ² λ΄λΆμμ μΈλΆλ‘ λκ°λ network traffic
Cluster λ΄μ μλΉμ€μ λν μΈλΆ μ κ·Όμ κ΄λ¦¬νλ API Object
μΌλ°μ μΌλ‘ HTTPS
λ₯Ό κ΄λ¦¬νλ€
Ingressλ λΆν λΆμ°, SSL μ’ λ£, λͺ μΉ κΈ°λ°μ κ°μ νΈμ€ν μ μ 곡ν μ μλ€
Node
Clusterμ μΌλΆ
Kubernetesμ μν worker machine
Cluster
Kubernetesμμ κ΄λ¦¬λλ containerν λ applicationμ μ€ννλ nodeμ μ§ν©
λλΆλΆμ Kubernetes λ°°ν¬μμ clusterμ μν nodeλ Public Internet
μ μΌλΆκ° μλλ€
Edge Router
Clusterμ λ°©νλ²½ μ μ± μ μ μ©νλ router
Cloud provider or physical hardwareμ μΌλΆμμ κ΄λ¦¬νλ Gateway
μΌ μ μλ€
Cluster Network
Kubernetes networking modelμ λ°λΌ cluster λ΄λΆμμ ν΅μ μ μ©μ΄νκ² νλ λ Όλ¦¬μ λλ 물리μ λ§ν¬μ μ§ν©
Service
Label selecter
λ₯Ό μ¬μ©ν΄μ pod
μ§ν©μ μλ³νλ Kubernetes service
λ¬λ¦¬ μΈκΈνμ§ μμΌλ©΄ serviceλ Cluster network
λ΄μμλ§ routing κ°λ₯ν κ°μ IPλ₯Ό κ°μ§κ³ μλ€κ³ κ°μ νλ€
Cluster μΈλΆμμ cluster λ΄λΆ μλΉμ€λ‘ HTTP μ HTTPS κ²½λ‘λ₯Ό λ ΈμΆνλ€
Traffic routing μ Ingress resourceμ μ μλ κ·μΉμ μν΄ control λλ€
Ingressλ μΈλΆμμ serviceλ‘ μ μ κ°λ₯ν URL, Load balance traffic, SSL/TSL μ’ λ£, κ·Έλ¦¬κ³ μ΄λ¦ κΈ°λ°μ virtual hosting serviceλ₯Ό μ 곡νλλ‘ κ΅¬μ±ν μ μλ€
Ingress controller
λ μΌλ°μ μΌλ‘ load balancerλ₯Ό μ¬μ©ν΄μ ingressλ₯Ό μνν μ±
μμ΄ μμΌλ©°, trafficμ μ²λ¦¬νλλ° λμμ΄ λλλ‘ edge router λ additional frontend λ₯Ό ꡬμ±ν μ μλ€
Ingressλ μμμ port λλ protocol μ λ ΈμΆμν€μ§ μλλ€
HTTPμ HTTPS μ΄μΈμ serviceλ₯Ό μΈν°λ·μ λ
ΈμΆνλ €λ©΄ μΌλ°μ μΌλ‘ Service.Type=NodePort
λλ Service.Type=LoadBalancer
λ₯Ό μ¬μ©νλ€
Ingress Controller
κ° μμ΄μΌ Ingress
λ₯Ό μΆ©μ‘±ν μ μλ€
Resourceλ§ μμ±νλ κ²μ ν¨κ³Όκ° μλ€! controller κ° νμνλ€
ingress-nginx
κ°μ ingress controller λ₯Ό λ°°ν¬ν΄μΌ νλλ°, ingress controllerμ μ’
λ₯λ λ€μνλ€
A minimal Ingress resource example
λ€λ₯Έ λͺ¨λ Kubernetes resourceμ λ§μ°¬κ°μ§λ‘ ingressμλ apiVersion
, kind
, metadata
fieldκ° νμνλ€
Ingress objectμ μ΄λ¦μ μ ν¨μ DNS subdomain name μ΄μ΄μΌ νλ€
Ingressλ μ’ μ’ annotationμ μ΄μ©ν΄μ ingress controllerμ λ°λΌ λͺ κ°μ§ optionμ ꡬμ±νλλ°, rewrite-target annotation μ μλ‘ λ€ μ μλ€
μλ‘ λ€λ₯Έ ingress controllerλ κ°κ° λ€λ₯Έ annotationμ μ§μνλ€
Ingress spec
μλ Load Balancer λλ proxy serverλ₯Ό ꡬμ±νλλ° νμν λͺ¨λ μ λ³΄κ° μλ€
κ°μ₯ μ€μν κ²μ, λ€μ΄μ€λ requestμ μΌμΉνλ κ·μΉ λͺ©λ‘μ ν¬ν¨νλ κ²μ΄λ€
Ingress resourceλ HTTP(S) traffic μ μ§μνλ κ·μΉλ§ μ§μνλ€
: κ° HTTP κ·μΉμλ λ€μμ μ λ³΄κ° ν¬ν¨λλ€
μ νμ host
λ§μ½ hostκ° μ 곡λλ©΄, κ·μΉμ΄ ν΄λΉ hostμ μ μ©λλ€
κ²½λ‘ λͺ©λ‘
κ²½λ‘ λͺ©λ‘μλ κ°κ° service.name
, service.port.name
or service.port.number
κ° μ μλμ΄ μλ, κ΄λ ¨ backendλ₯Ό κ°μ§κ³ μλ€
Load balancerκ° trafficμ΄ μ°Έμ‘°λ μλΉμ€λ‘ 보λ΄κΈ° μ μ hostμ path λ incoming requestμ λ΄μ©μ΄ match λμ΄μΌ νλ€
Backend
Backendλ service docs λλ μ¬μ©μ μ μ resource backendμ μ€λͺ λ κ² μ²λΌ service μ port μ΄λ¦μ μ‘°ν©μ΄λ€.
Hostμ κ·μΉ κ²½λ‘κ° μΌμΉνλ ingressμ λν HTTP(S) μμ²μ backend λͺ©λ‘μΌλ‘ μ μ‘λλ€
κ·μΉμ΄ μλ ingressλ λͺ¨λ trafficμ νλμ default backendλ‘ μ μ‘νλ€
DefaultBackendλ ingress controller
μ κ΅¬μ± optionμ΄κ³ , ingress resource
μ μ§μ λμ΄ μμ§ μλ€
λ§μ½ ingress object
μ HTTP μμ²κ³Ό μΌμΉνλ host or pathκ° μμΌλ©΄, trafficμ default backendλ‘ routing λλ€
Resource backend
λ ingresss objectμ λμΌν namespace λ΄μ μλ λ€λ₯Έ Kubernets resourceμ λν ObjectRef μ΄λ€
Resource
λ serviceμ μνΈ λ°°νμ μΈ μ€μ μ΄λ©°, λ λ€ μ§μ νκ² λλ©΄ μ ν¨μ± κ²μ¬ λ₯Ό ν΅κ³Ό ν μ μλ€
μ ν¨μ± κ²μ¬μ μ€ν¨νλ€
Resource backend
μ μΌλ°μ μΈ μ©λλ static assetμ΄ μλ object storage backendλ‘ dataλ₯Ό μμ νλ κ² μ΄λ€
Resource backend example
μμ yaml file μ²λΌ ingress λ₯Ό μμ±νκ³ , μλμ λͺ λ ΉμΌλ‘ μμ±λ ingressλ₯Ό νμΈ ν μ μλ€
κ²°κ³Ό
Ingress μ κ° κ²½λ‘μλ ν΄λΉ κ²½λ‘μ μ νμ΄ μμ΄μΌ νλ€
λͺ
μμ pathType
μ ν¬ν¨νμ§ μλ κ²½λ‘λ μ ν¨μ± κ²μ¬ λ₯Ό ν΅κ³Όνμ§ λͺ»νλ€!
μ§μλλ κ²½λ‘ μ νμ μλμ 3κ°μ§κ° μλ€
ImplementationSpecific
μ΄ κ²½λ‘ μ νμ μΌμΉ μ¬λΆλ IngressClass μ λ°λΌ λ¬λΌμ§λ€
μ΄κ²μ ꡬνν λ λ³λ pathType
μΌλ‘ μ²λ¦¬νκ±°λ,
Prefix
λλ Exact
κ²½λ‘ μ νμ²λΌ μ²λ¦¬ν μ μλ€
Exact
URL κ²½λ‘μ λμλ¬Έμλ₯Ό μ격νκ² μΌμΉμν¨λ€
Prefix
URL κ²½λ‘μ μ λμ¬λ₯Ό /
λ₯Ό κΈ°μ€μΌλ‘ λΆλ¦¬ν κ°κ³Ό μΌμΉμν¨λ€
λμλ¬Έμλ₯Ό ꡬλΆνκ³ ,
Element basisλ‘ path elementλ₯Ό μΌμΉμν¨λ€
Request pathμ λͺ¨λ elementλ³ μ λμ¬κ° p μΈ κ²½μ° μμ²μ p κ²½λ‘μ μΌμΉνλ κ²μ΄λ€
λ¨, κ²½λ‘μ λ§μ§λ§ μμκ° request pathμ μλ λ§μ§λ§ elementμ νμ λ¬Έμμ΄μΈ κ²½μ°μλ μΌμΉνμ§ μλλ€
ex)
/foo/bar
μ /foo/bar/baz
λ μΌμΉνμ§λ§,
/foo/bar
μ /foo/barbaz
λ μΌμΉνμ§ μλλ€!
κ²½μ°μ λ°λΌ Ingressμ μ¬λ¬ κ²½λ‘κ° requestμ μΌμΉν μ μλ€
μ΄ κ²½μ° μΌμΉνλ κ²½λ‘ μ€ κ°μ₯ κΈ΄ κ²½λ‘κ° μ°μ μμλ₯Ό κ°λλ€
λ κ°μ κ²½λ‘μ κΈΈμ΄κ° λμΌν κ²½μ°, Prefix
κ²½λ‘ μ νλ³΄λ€ Exact
κ²½λ‘ μ νμ κ°μ§ κ²½λ‘κ° μ¬μ©λλ€!
+
Kubernetesμ μλΉμ€λ L4 layer
λ‘ TCP
λ¨μμ Pods λ₯Ό balancing νλ€
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 μ νΈν¨