์ด ๊ธฐ์ฌ์์๋ ๊ฐ์ธํ๋ ์ค๋ฅ ํ์ด์ง ํ์์ ๊ด๋ จ๋ NGINX Ingress์ ๋ ๊ฐ์ง ๊ธฐ๋ฅ๊ณผ ํด๋น ๊ธฐ๋ฅ์ ์กด์ฌํ๋ ์ ํ ์ฌํญ ๋ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํ๊ณ ์ถ์ต๋๋ค.
1. ๊ธฐ๋ณธ ๋ฐฑ์๋ ๋ณ๊ฒฝ
๊ธฐ๋ณธ์ ์ผ๋ก NGINX Ingress๋ ํด๋น ๊ธฐ๋ฅ์ ์ํํ๋ ๊ธฐ๋ณธ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ Ingress ๋ฆฌ์์ค์ ์๋ ํธ์คํธ๋ฅผ ์ง์ ํ๋ Ingress๋ฅผ ์์ฒญํ ๋ 404 ์๋ต ์ฝ๋๊ฐ ํฌํจ๋ ๋ค์ ํ์ด์ง๋ฅผ ์์ ํจ์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ ์ ๋ ๋ง์ ๊ณ ๊ฐ์ด ํ์ค 404 ๋์ ํ์ฌ ๋ก๊ณ ๋ฐ ๊ธฐํ ํธ์ ์์ค์ ํ์ด์ง์ ํ์ํด ๋ฌ๋ผ๋ ์์ฒญ์ ๋ฐ๊ณ ์์ต๋๋ค. ์ด๋ฅผ ์ํด NGINX Ingress๋ default-backend-service
. ํ์ ํญ๋ชฉ์ ๋์ผํ ์ด๋ฆ์ ์ต์
์ ๋ํ ์ธ์๋ก ์ ๋ฌํฉ๋๋ค. namespace/servicename
. ์๋น์ค ํฌํธ๋ 80์ด์ด์ผ ํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉํ์ฌ ์์ฒด Pod(๋ฐฐํฌ) ๋ฐ ์๋น์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค(
๋ค์์ ์์ ๊ทธ๋ฆผ์ ๋๋ค.
~$ curl -i -XGET http://sadsdasdas.kube-cloud.my/
HTTP/1.1 404 Not Found
Date: Mon, 11 Mar 2019 05:38:15 GMT
Content-Type: */*
Transfer-Encoding: chunked
Connection: keep-alive
<span>The page you're looking for could not be found.</span>
๋ฐ๋ผ์ YAML์ ํตํด ๋ช
์์ ์ผ๋ก ์์ฑ๋์ง ์์ ๋ชจ๋ ๋๋ฉ์ธ์ kind: Ingress
, ๊ธฐ๋ณธ ๋ฐฑ์๋์ ์ํฉ๋๋ค. ์ ๋ชฉ๋ก์์ ์ด ๋๋ฉ์ธ์ sadsdasdas
.
2. ๊ธฐ๋ณธ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ HTTP ์ค๋ฅ ์ฒ๋ฆฌ
๋ ๋ค๋ฅธ ์ํฉ์ ์ด๋ฌํ ์ํฉ์ ์ฒ๋ฆฌํ์ง ์๋(ํด๋น ์๋ฆ๋ค์ด ํ์ด์ง๊ฐ ์์ฑ๋์ง ์์) ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ HTTP ์ค๋ฅ(404, 500, 502...)๋ก ๋๋๋ ์์ฒญ์ ๋๋ค. ์ด๋ ๋ํ ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋์ผํ ์ค๋ฅ ํ์ด์ง๋ฅผ ์ ๊ณตํ๋ ค๋ ๊ฐ๋ฐ์์ ๋ฐ๋ ๋๋ฌธ์ผ ์๋ ์์ต๋๋ค.
์๋ฒ ์ธก์์ ์ด ์ฌ๋ก๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ค์์ด ํ์ํฉ๋๋ค.
- ๊ธฐ๋ณธ ๋ฐฑ์๋์ ๋ํ ๋จ๋ฝ์ ์ ์ง์นจ์ ๋ฐ๋ฅด์ธ์.
- nginx-ingress ๊ตฌ์ฑ ConfigMap์ ํค ์ถ๊ฐ
custom-http-errors
, ์๋ฅผ ๋ค์ด ๋ค์ ๊ฐ์ ์ฌ์ฉํ์ฌ404,503
(๋ถ๋ช ํ ์ ๊ท์น์ด ์ ์ฉ๋๋ ์ค๋ฅ ์ฝ๋์ ํด๋นํฉ๋๋ค).
์์ํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ์ฑ๋์์ต๋๋ค. ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ค์ด๊ณ ์๋ต ์ฝ๋ 404 ๋๋ 503๊ณผ ํจ๊ป ์ค๋ฅ๋ฅผ ์์ ํ๋ฉด ์์ฒญ์ด ์๋์ผ๋ก ์ ๊ธฐ๋ณธ ๋ฐฑ์๋๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ธฐ๋ณธ ๋ฐฑ์๋ ๋ฐ custom-http-errors์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ๊ธฐ๋ฅ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
!!! Important The custom backend is expected to return the correct HTTP status code instead of 200. NGINX does not change the response from the custom default backend.
์ฌ์ค์ ์์ฒญ์ด ๋ฆฌ๋๋ ์
๋ ๋ ํค๋์ ์ด์ ์๋ต ์ฝ๋ ๋ฐ ์ถ๊ฐ ์ ๋ณด์ ํจ๊ป ์ ์ฉํ ์ ๋ณด๊ฐ ํฌํจ๋๋ค๋ ๊ฒ์
๋๋ค(์ ์ฒด ๋ชฉ๋ก์ ์ฌ์ฉํ ์ ์์).
์ด๊ฒ์ ๋น์ ์ด ์ค์ค๋กํด์ผํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค ์ฌ๋ฐ๋ฅธ ์๋ต ์ฝ๋๋ฅผ ๊ด๋ฆฌํ์ธ์.
์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค ๊ธฐ๋ณธ ๋ฐฑ์๋๊ฐ ๋ค๋ฆ ๋๋ค.
์๋ฃจ์ ์ด ์ ์ฒด ํด๋ฌ์คํฐ์ ๋ํด ์ ์ญ์ ์ด์ง ์๊ณ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ง ์ ์ฉ๋๋์ง ํ์ธํ๋ ค๋ฉด ๋จผ์ Ingress ๋ฒ์ ์ ํ์ธํด์ผ ํฉ๋๋ค. ์ผ์นํ๋ ๊ฒฝ์ฐ 0.23 ์ด์, ๊ธฐ๋ณธ Ingress ์ฃผ์์ ์ฌ์ฉํ์ญ์์ค.
- ์ฐ๋ฆฌ๋ ์ฌ์ ์ํ ์ ์์ต๋๋ค
default-backend
์ ๊ฐ ์ธ๊ทธ๋ ์ค์์ฃผ์ ์ฌ์ฉ ; - ์ฐ๋ฆฌ๋ ์ฌ์ ์ํ ์ ์์ต๋๋ค
custom-http-errors
์ ๊ฐ ์ธ๊ทธ๋ ์ค์์ฃผ์ ์ฌ์ฉ .
๊ฒฐ๊ณผ์ ์ผ๋ก Ingress ๋ฆฌ์์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ .Chart.Name }}-app2
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/custom-http-errors: "404,502"
nginx.ingress.kubernetes.io/default-backend: error-pages
spec:
tls:
- hosts:
- app2.example.com
secretName: wildcard-tls
rules:
- host: app2.example.com
http:
paths:
- path: /
backend:
serviceName: {{ .Chart.Name }}-app2
servicePort: 80
์ด ๊ฒฝ์ฐ ์ค๋ฅ 404 ๋ฐ 502๋ ํ์ํ ๋ชจ๋ ํค๋์ ํจ๊ป ์ค๋ฅ ํ์ด์ง ์๋น์ค๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค.
ะ ์ด์ ๋ฒ์ ์ Ingress์๋ ์ด ๊ธฐ๋ฅ์ด ์์์ต๋๋ค. (
์์ < 0.23: ์ ๊ทผ ๋ฐฉ์ XNUMX
์ด ์ต์
์ ๋ ๊ฐ๋จํฉ๋๋ค. ํ์ด์ง๋ฅผ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก์ ํค๋๋ฅผ ๋ณด๊ณ ์ฌ๋ฐ๋ฅธ ์๋ต ์ฝ๋๋ฅผ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๋ ์ผ๋ฐ HTML์ด ์์ต๋๋ค. ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์
์ URL์์ Ingress๋ฅผ ํตํด ์ถ์๋ฉ๋๋ค. /error-pages
, ๊ทธ๋ฆฌ๊ณ ์นดํ๋ก๊ทธ์์ ws
๋ฐํ๋ HTML์ด ๋ฉ๋๋ค.
YAML์ ๊ทธ๋ฆผ:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ .Chart.Name }}-app2
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/server-snippet: |
proxy_intercept_errors on;
error_page 500 501 502 503 504 @error_pages;
location @error_pages {
rewrite ^ /error-pages/other/index.html break;
proxy_pass http://error-pages.prod.svc.cluster.local;
}
spec:
tls:
- hosts:
- app2.example.com
secretName: wildcard-tls
rules:
- host: app2.example.com
http:
paths:
- path: /
backend:
serviceName: {{ .Chart.Name }}-app2
servicePort: 80
์ด ๋ฐฐํฌ๋ฅผ ์ํ ์๋น์ค๋ ClusterIP ์ ํ์ด์ด์ผ ํฉ๋๋ค.
๋์์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ ์ ํ๋ฆฌ์ผ์ด์ ์์ Ingress์ ๋ค์ ๋ด์ฉ์ด ํฌํจ๋ ์๋ฒ ์ค๋ํซ ๋๋ ๊ตฌ์ฑ ์ค๋ํซ์ ์ถ๊ฐํฉ๋๋ค.
nginx.ingress.kubernetes.io /server-snippet: |
proxy_intercept_errors on;
error_page 500 501 502 503 504 @error_pages;
location @error_pages {
rewrite ^ /error-pages/ws/index.html break;
proxy_pass http://error-pages.prod.svc.cluster.local;
}
Ingress < 0.23: ๋ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์
ํค๋๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ต์ ... ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ custom-http-errors์์ ๋น๋ฆฐ ๋ ์ ํํ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋์ผ๋ก(๋ณต์ฌ) ์ฌ์ฉํ๋ฉด ์ ์ญ ์ค์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฐฝ์กฐํ๋ค
nginx.ingress.kubernetes.io /server-snippet: |
proxy_intercept_errors off;
error_page 404 = @custom_404;
error_page 503 = @custom_503;
location @custom_404 {
internal;
proxy_intercept_errors off;
proxy_set_header X-Code 404;
proxy_set_header X-Format $http_accept;
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Namespace $namespace;
proxy_set_header X-Ingress-Name $ingress_name;
proxy_set_header X-Service-Name $service_name;
proxy_set_header X-Service-Port $service_port;
proxy_set_header Host $best_http_host;
rewrite ^ /error-pages/ws/index.html break;
proxy_pass http://error-pages.prod.svc.cluster.local;
}
location @custom_503 {
internal;
proxy_intercept_errors off;
proxy_set_header X-Code 503;
proxy_set_header X-Format $http_accept;
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Namespace $namespace;
proxy_set_header X-Ingress-Name $ingress_name;
proxy_set_header X-Service-Name $service_name;
proxy_set_header X-Service-Port $service_port;
proxy_set_header Host $best_http_host;
rewrite ^ /error-pages/ws/index.html break;
proxy_pass http://error-pages.prod.svc.cluster.local;
}
๋ณด์๋ค์ํผ, ์ฒ๋ฆฌํ๋ ค๋ ๊ฐ ์ค๋ฅ์ ๋ํด "๊ธฐ๋ณธ" ํค๋์ ๊ฐ์ด ํ์ํ ๋ชจ๋ ํค๋๊ฐ ์ฝ์
๋ ์์ฒด ์์น๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
PS
๊ธฐํ K8s ํ ๋ฐ ์๋ น ์๋ฆฌ์ฆ:
- ยซ
ํด๋ฌ์คํฐ์์ ์คํ ์ค์ธ ๋ฆฌ์์ค๋ฅผ Helm 2 ๊ด๋ฆฌ๋ก ์ ์ก "; - ยซ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ธ๋ ํ ๋น ๋ฐ ๋ก๋ ์ ๋ณด "; - ยซ
๊ฐ๋ฐ ์ฌ์ดํธ์ ๋ํ ์ก์ธ์ค "; - ยซ
๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํธ์คํธ๋ฉ ์๋ ํฅ์ ".
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Istio๋ฅผ ์ฌ์ฉํ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋์๊ฐ๋๋ค. 1 ๋ถ "; - ยซ
[๊ทธ๋ฆผ] Kubernetes ๋คํธ์ํน ๊ฐ์ด๋. 3๋ถ ".
์ถ์ฒ : habr.com