๐ก NGINX Ingress Controller Archi & SSL โ Executive Summary
Technical architectural analysis, practical configuration manifests, and deployment instructions for NGINX Ingress Controller Archi & SSL.
Setups
bash
repo=bitnami
sdiff -s <(helm show values ${repo}/$(cat Chart.yaml | yq '.name') --version=$(cat Chart.yaml | yq '.version') | yq -oprops) <(cat ./values.yaml | yq -oprops)
nodeAffinityPreset.type = | nodeAffinityPreset.type = hard
nodeAffinityPreset.key = | nodeAffinityPreset.key = node-role.kubernetes.io/control-plane
> nodeAffinityPreset.values.0 = true
> tolerations.0.key = node-role.kubernetes.io/control-plane
> tolerations.0.operator = Exists
> tolerations.0.effect = NoSchedule
service.externalTrafficPolicy = | service.externalTrafficPolicy = Local
Annotations
bash
nginx.ingress.kubernetes.io/ssl-redirect: "true" #http ์ ๊ทผ์ https๋ก ๋ฆฌ๋ค์ด๋ ํธ
nginx.ingress.kubernetes.io/whitelist-source-range: 0.0.0.0/24,1.1.1.1 #์ ๊ทผํ์ฉ ๋์ญ,IP ๋ช
์
nginx.ingress.kubernetes.io/proxy-body-size: "1g" #1gb๊น์ง ์
๋ก๋ ํ์ฉ
nginx.org/lb-method: "ip_hash" # ip_hash ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐฉ๋ฒ์ ์ ํํฉ๋๋ค
nginx.org/ssl-services: "webapp" # ๋ฐฑ์๋ ๋ฉ์๋์ TLS๋ฅผ ํ์ฑํํฉ๋๋ค
nginx.org/proxy-connect-timeout: "10s" # ๋ฐฑ์๋์ ๋ํ ์๊ฐ ์ด๊ณผ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
nginx.org/proxy-read-timeout: "10s"
nginx.org/proxy-send-timeout: "10s"
nginx.org/rewrites: "serviceName=webapp rewrite=/v1" # ์์ฒญ URI rewrite
nginx.com/jwt-key: "webapp-jwk" # ์์ฒญ์ JWT ์ธ์ฆ ํ์ฑํ
nginx.com/jwt-realm: "Webb App"
nginx.com/jwt-token: "$cookie_auth_token"
nginx.com/jwt-login-url: "https://login.example.com"
#path ์๋ก ์ฐ๊ธฐ
nginx.ingress.kubernetes.io/rewrite-target: /ceph-dashboard/$2
#manifest: spec.rules[].http.paths[].path: "/ceph-dashboard(/|$)(.*)"
common
bash
#cert-manager certification ์์ฑ์์ฒญ
cert-manager.io/cluster-issuer: $clusterissuer
cert-manager.io/issuer: $issuer
# nginx
## ์ธ์
์ ์ง ๋ฐ ์น์์ผ ๊ณ ์ (Sticky Session)
#nginx.ingress.kubernetes.io/affinity: "cookie"
#nginx.ingress.kubernetes.io/session-cookie-name: "route"
#nginx.ingress.kubernetes.io/session-cookie-change-on-failure: "true"
## Client IP Hash ๊ธฐ๋ฐ Sticky Session
nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
# ํ์์์ ์ค์ (์ฐ๊ฒฐ ์ ์ง)
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
## ๋ฐ์ดํฐ ์ฒ๋ฆฌ
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
## custom header
nginx.ingress.kubernetes.io/custom-headers: "portal/no-cache-headers"
Logging
IP normal detection/output method
- nginx-ingress-controller must be scheduled on the IP request node called externally.
- If public IP is controle-plane
- Allow controle-plane scheduling and restrict autoscheduling
bash
k uncordon $controle_plane
k edit node $controle_plane
>>>
# .spec ์ถ๊ฐ
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane #์ ์ ํ ๋ผ๋ฒจ
value: "true"
<<<
- Apply schedule options on deployment (defined in values.yaml for helm)
bash
k edit -n $ns deploy/nginx-ingress-controller
>>>
# .spec.template.spec ์ถ๊ฐ
# ์ค์ผ์ค๋ง ๋
ธ๋ ์ง์
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: In
values:
- "true"
# ์ค์ผ์ค๋ง ๋
ธ๋ ํ์ฉ
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
operator: Exists
<<<
- Setting service
externalTrafficPolicy
bash
k edit svc -n $ns nginx-ingress-controller
>>>
# .spec ๋ณ๊ฒฝ
externalTrafficPolicy: Local #Cluster
<<<
Features
When using a control-plane with small memory only for ingress
- node spec
bash
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
- nginx-ingress-setting
bash
nodeAffinityPreset.type = | nodeAffinityPreset.type = hard
nodeAffinityPreset.key = | nodeAffinityPreset.key = node-role.kubernetes.io/control-plan
> nodeAffinityPreset.values.0 = true
> tolerations.0.key = node-role.kubernetes.io/control-plane
> tolerations.0.operator = Exists
> tolerations.0.effect = NoSchedule
defaultBackend.enabled = true | defaultBackend.enabled = false
service.externalTrafficPolicy = | service.externalTrafficPolicy = Local




Leave a Reply