프로그래밍
[K8S] Ingress 에서 다른 Namespace 의 Service 연결
tedhong
2023. 4. 11. 17:51
서론
- 개발을 위해 develop namespace에서 만 ingress를 운영하다가 live 배포를 위해 live namespace 에도 ingress를 생성했습니다.
- 그런데 기존에 잘 접속이 되던 develop namespace 의 Service에 접속하면 502, 404 에러를 뱉어내며 연결이 되지 않았습니다.
- 알아보니 동일한 포트를 사용하는 ingress 가 여러개 생성되면 나중에 선언된 ingress의 port 가
기존 port를 덮어써 버리기 때문에 발생하는 문제였습니다. - 그래서 ingress 는 하나로 운영하되 다른 namespace의 Service를 호출하는 방법을 사용하기로 했습니다.
내용
Sevice - ExternalName 사용
- ingress 와 동일한 namespace에 ExternalName type의 Service를 선언합니다.
apiVersion: v1
kind: Service
metadata:
name: {ingress에서불러올Service이름}
namespace: {ingress와동일한namespace}
spec:
type: ExternalName
externalName: {서비스명}.{Namespace명}.svc.cluster.local
예시) live 라는 namespace에 있는 live-cms-be 서비스를
develop라는 namespace에 live-cms-service라는 이름의 Service로 선언합니다.
apiVersion: v1
kind: Service
metadata:
name: live-cms-service
namespace: develop
spec:
type: ExternalName
externalName: live-cms-be.live.svc.cluster.local
2. ingress에 위에서 등록한 Service를 추가합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dev-nginx-ingress
namespace: develop
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
ingressClassName: nginx
rules:
- host : 'test.tedhome.net'
http:
paths:
- path: /
backend:
service:
name: live-cms-service #위에서 선언한 Service 명입니다.
port:
number: 80
Ingress의 이름은 dev-nginx-ingress, Namespace 이름은 develop입니다.
이렇게 하면 develop이라는 Namespace에 등록된 Ingress에서
live라는 namespace의 live-cms-be라는 Service를 호출할 수 있게 됩니다.
더보기
환경정보
- ncloud 의 Kubernetes Service 사용
- K8S version : 1.23.9
- nginx ingress Class 사용
