NGINX Ingress Controller Archi & SSL

๐Ÿ’ก 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

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *