[K8S] Support TLSv1, TLSv1.1 at Nginx Ingress Controller
https, tls, ssl, version, k8s, kubernetes, nginx, ingress, controller ·๐ Note: ์ด ํฌ์คํ ์ Kubernetes community ์์ ๊ฐ๋ฐํ๊ณ ๊ด๋ฆฌํ๋ โofficialโ NGINX ingress controller ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์์ต๋๋ค. NGINX ์์ ์ ๊ณตํ๋ ingress controller ์๋ ์ฐจ์ด๊ฐ ์์ ์ ์์ต๋๋ค.
๐ TLS/HTTPS in NGINX Ingress Controller
NGINX ingress controller ์ ๊ธฐ๋ณธ ์ง์ TLS ๋ฒ์ ์ TLSv1.2 / TLSv1.3 ์ด๋ค. ํ์ ๋ฒ์ ์ ์ทจ์ฝ์ ๋๋ฌธ์ ๊ธฐ๋ณธ ์ค์ ์๋ ๋น ์ ธ ์์ง๋ง, ์ค๋๋ ๋ฒ์ ์ ๊ธฐ๊ธฐ์์๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ค๋ฉด ์ต์ํ TLSv1.1 ์ ์ง์์ ํ์์ ์ด๋ค.
๐ ConfigMap
ConfigMap ์ค์ ์ ํตํด ๊ฐ๋จํ ingress controller ์ NGINX ์๋ฒ ์ค์ ์ ๋ณ๊ฒฝํด ์ค ์ ์๋ค.
๋จผ์ , ingress controller pod ๋ฅผ ํ์ธํ์ (namespace: โingress-nginxโ)
> kubectl get -n ingress-nginx pods
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-54d8b558d4-798w5 1/1 Running 0 102d
๋ค์์ผ๋ก, ingress controller ๊ฐ ์ฌ์ฉํ๋ configmap ์ ํ์ธํ๋ค.
> kubectl describe -n ingress-nginx pod/ingress-nginx-controller-54d8b558d4-798w5 | grep configmap
--configmap=$(POD_NAMESPACE)/ingress-nginx-controller
Configmap ์ ์ด๋ฆ์ด ingress-nginx-controller
์ธ ๊ฒ์ ํ์ธํ์ผ๋ฏ๋ก, ์๋์ ๊ฐ์ด configmap ์์ฑ์ฉ yaml ํ์ผ์ ์์ฑํ๋ค.
apiVersion: v1
kind: ConfigMap
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
data:
allow-snippet-annotations: 'true'
ssl-protocols: TLSv1 TLSv1.1 TLSv1.2 TLSv1.3
ssl-ciphers: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA
allow-snippet-annotations
๋ ๊ธฐ์กด configmap ์ ๋ด์ฉ์ ๋ฐ์ํ ๊ฒ์ด๋ค. ๊ธฐ์กด configmap ์ ๋ค๋ฅธ ๋ด์ฉ์ด ์๋ค๋ฉด ์ ๋ถ ์ถ๊ฐํด ์ค๋ค. (kubectl describe -n ingress-ningx configmap/ingress-nginx-controller
๋ช
๋ น์ผ๋ก ํ์ธ)
> kubectl apply -f configmap.yaml
ํด๋ฌ์คํฐ์ ์ ์ฉํ๊ณ ๋๋ฉด, ์ ์ด ๋ด์ง ์ ๋ถ ์ด๋ด์ NGINX ingress controller ๊ฐ configmap ์ ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ณ ์๋์ผ๋ก ๋ณ๊ฒฝ๋ ์ค์ ์ ์ ์ฉํ๋ค. ์ค์ ๋ณ๊ฒฝ์ด ์ ์ฉ๋์๋์ง๋ kubectl get events -n ingress-nginx
๋ช
๋ น์ผ๋ก ํ์ธํ ์ ์๋ค.
๋ณ๊ฒฝ๋ ์ค์ ์ผ๋ก RELOAD ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ๋๋ฉด nginx ์ค์ ์ด ๋ณ๊ฒฝ๋์์์ ํ์ธํ์.
> kubectl -n ingress-nginx exec -it ingress-nginx-controller-54d8b558d4-798w5 -- cat /etc/nginx/nginx.conf | grep ssl_protocols
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
์ด๋ฏธ ์๋น์ค ์ค์ธ domain ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, https://www.cdn77.com/tls-test ์ ๊ฐ์ด ์๋ฒ์ SSL/TLS ์ง์ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํด ์ฃผ๋ ์ฌ์ดํธ์์๋ ํ์ธ ๊ฐ๋ฅํ๋ค.