home..

Ingress 리다이렉팅하기

kubernetes msa mont-kim aws eks pod ingress nginx

Ingress 리다이렉팅하기

오늘은 Ingress 리다이렉팅에 대해 알아보겠습니다.

기존에 사용하던 도메인은 mont-kim.com이었습니다.

쿠버네티스의 Ingress Controller에서도 mont-kim.com에 대한 서브도메인들을 사용하고 있었고, Keycloak으로 서비스들을 통합하는 과정에서 타 도메인/환경에서는 발생하지 않는 문제점들을 겪어 새로운 도메인으로 이사를 결정했습니다.

.com 도메인이 아닌 다른 도메인들을 고려했으나, 결국 손이 제일 가는 것은 .com 도메인이었기 때문에 montkim.com이라는 유사한 도메인을 새로 구했습니다.

다른 서비스들은 쉽사리 도메인을 변경하고, 새로 구축을 했으나,

“현재 구글에서 검색도 되지 않는 블로그지만,” 게시글 몇 개를 외부로 공개했었고, 링크를 받은 분들이 게시글에 접속하지 못하는 상황은 원치 않았기 때문에, 새로운 도메인으로 접속 요청을 처리함과 동시에, 기존의 접속 요청을 받았을 때 새로운 도메인으로 리다이렉팅하는 방법을 찾아보게 되었습니다.

기존의 도메인으로 접속요청은 ingress로 처리하고있었고, 그중에서 ingress nginx controller를 이용해 도메인을 처리하고있었습니다.

ingress nginx controller에서 지원하는 기능중 redirect 관련 설정을 찾아 요약해보았습니다.

  1. 영구 리디렉션 (Permanent Redirect)
    • nginx.ingress.kubernetes.io/permanent-redirect: 이 주석은 클라이언트에게 요청된 리소스가 새로운 URL로 영구적으로 이동되었다는 것을 알립니다. HTTP 상태 코드 301을 반환하며, 이후 클라이언트는 해당 URL로 직접 요청을 보내도록 합니다. 이 주석의 값이 https://www.google.com으로 설정되면 모든 요청은 https://www.google.com로 리다이렉트 됩니다.
  2. 영구 리디렉션 코드 (Permanent Redirect Code)
    • nginx.ingress.kubernetes.io/permanent-redirect-code: 이 주석은 영구적 리디렉션을 수행할 때 사용되는 HTTP 상태 코드를 변경하게 해줍니다. 기본값은 301이지만, 이 주석을 사용하면 다른 상태 코드로 변경할 수 있습니다. 예를 들어, nginx.ingress.kubernetes.io/permanent-redirect-code: '308'로 설정하면 308 상태 코드를 사용하여 영구 리다이렉션을 반환합니다. 이 코드는 원래 요청이 GET이 아니었을 경우에도 동일한 방식으로 요청을 유지하도록 웹 브라우저에 지시합니다.
  3. 임시 리디렉션 (Temporal Redirect)
    • nginx.ingress.kubernetes.io/temporal-redirect: 이 주석은 임시적 리디렉션, 즉 HTTP 상태 코드 302를 반환하도록 설정합니다. 이는 클라이언트에게 요청된 리소스가 일시적으로 다른 위치로 이동 되었음을 알리며, 클라이언트는 이후 동일한 URL로 요청을 계속 보낼 것입니다. 예를 들어, 이 주석의 값이 https://www.google.com으로 설정되면 모든 요청은 일시적으로 https://www.google.com로 리다이렉트 됩니다.

블로그 리다이렉팅의 경우, nginx.ingress.kubernetes.io/permanent-redirect가 더 적합할 것으로 예상되어 기존의 ingress 파일을 다음과 같이 수정했습니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jekyll-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "letsencrypt-issuer"
    nginx.ingress.kubernetes.io/permanent-redirect: "http://blog.montkim.com"
spec:
  rules:
    - host: blog.mont-kim.com
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: jekyll-service
                port:
                  number: 80
  tls:
    - hosts:
        - blog.mont-kim.com
      secretName: jekyll-tls

이 파일 외에 blog.montkim.com 의 ingress파일을 작성했었는데, ingress 파일을 총 두 개 생성했고, 이후 blog.mont-kim.com 으로 접속 시도를 했을 때, blog.montkim.com 로 변환되는 것을 확인했습니다.

© 2024 mont kim   •  Powered by Soopr   •  Theme  Moonwalk