nginx와 minikube ingress 연동

2024. 2. 3. 09:54Web Server/nginx

DNS 등록

hosts 파일이나 DNS에 등록
------------------------------------
{minikube가 설치된 PC IP} pod.test.co.kr
{minikube가 설치된 PC IP} node.test.co.kr
------------------------------------

ingress 등록

# pod ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pod-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: pod.test.co.kr
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: {대상 pod의 service}
                port:
                  number: {대상 pod의 service port}
                  
# node ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: node-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: node.test.co.kr
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: {대상 pod의 service}
                port:
                  number: {대상 pod의 port}
                  
# ingress 등록
kubectl apply -f {pod ingress yaml}
kubectl apply -f {node ingress yaml}

nginx 구성

# reverse-proxy.conf 파일
server {
        listen {nginx port};
        listen [::]:{nginx port};

        location / {
                proxy_pass http://{ingress ip};
                proxy_set_header Host $host; # 없으면, ingress에 도메인 전달이 안됨
        }
}

# nginx 재시작
sudo systemctl reload nginx

접속 테스트
도메인별로 해당 pod의 결과가 나와야 함

http://pod.test.co.kr
http://node.test.co.kr

Trouble Shooting

# nginx
# 404 에러
# Case1
브라우져에서 호출한 도메인 정보가 ingress까지 전달되지 않는 경우
nginx의 proxy_set_header 옵션 확인 필요
# Case2
ingress에 호출된 도메인에 해당하는 ingress가 없는 경우

# 502 에러
# proxy 대상 서비스가 없는 경우
# nginx 로그 보기
tail -f /var/log/nginx/error.log
---------------
failed (111: Unknown error) while connecting to upstream, client: {ip}, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://{proxy ip}:{proxy port}/favicon.ico", host: "node.test.co.kr", referrer: "http://node.test.co.kr/"
---------------

# 503 Service Temporarily Unavailable
# minikube까지는 전송이 되었고, minikube에서 에러가 발생한 경우
# ingress 로그 보기
kubectl logs -f ingress-nginx-controllerxxxxxxxxx-n ingress-nginx --tail=200
-----------
# 실패 로그
# namespace: default, service: web, port: 80으로 호출
# 접속된 pod 정보 기록 안됨: - - - -
GET /favicon.ico HTTP/1.0" 503 592 "http://pod.test.co.kr/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" 396 0.000 [default-web-80] [] - - - - 7404a2329254c762c62aff4dcf12c33c

# 성공 로그
# namespace: default, service: pod, port: 80으로 호출
# 접속된 pod 정보 기록: 10.244.0.23:8080
"GET /favicon.ico HTTP/1.0" 200 59 "http://pod.test.co.kr/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" 396 0.001 [default-pod-80] [] 10.244.0.23:8080 59 0.001 200 55ca15afef51f67b40a33b9b6a82bc15
-----------

'Web Server > nginx' 카테고리의 다른 글

nginx 컴파일해서 설치하기: nginx tcp proxy 서버 구성  (0) 2024.03.11
nginx header 정보 제거  (0) 2024.03.01
nginx 인증 설정  (0) 2023.06.10
minikube proxy 설정  (0) 2023.06.06
nginx Trouble Shooting  (0) 2023.05.27