기본적으로 Kubernetes에서 Ingress는 Namespace에 종속적입니다.
따라서 A-namespace에 있는 Ingress는 B-Namespace에 있는 Service로 라우팅을 하지 못하는데요.
이를 해결하기 위해서는 External Name을 이용하면 됩니다.
그럼 External Name이란?
쉽게얘기하면 DNS의 CNAME 레코드라고 보시면 됩니다.
external-name.svc.namepsace-a.svc.cluster.local을 호출하면 Kubernets 클러스터 DNS서버는 해당 External Name에 대한 CNAME Record를 반환하게 됩니다. 다른 Service Object와 접근하는 방식은 동일하나, 프록시 or Forwarding 형태의 Service Object가 아니라, 단순히 DNS 매핑, Alias의 역할만 한다는 점에서 차이가 있습니다.
실습 진행
실습 목표: default namespace에 있는 Ingress에서 namespace-a에 있는 ade Service 와 연결 해보도록 하겠습니다.
목차
1. Deployment - ClusterIP 배포
2. ExternalName 배포
3. Ingress 배포
[Deployment]
* coffee, tea 서비스는 모두 이미 배포가 되어있는 상황입니다.
1. ade Deployment, Service를 배포합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: ade
namespace: namespace-a
spec:
replicas: 3
selector:
matchLabels:
app: ade
template:
metadata:
labels:
app: ade
spec:
containers:
- name: ade
image: nginxdemos/nginx-hello:plain-text
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: ade-svc
namespace: namespace-a
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: ade
[External Name 배포]
1. External Name 서비스 오브젝트를 배포합니다.
apiVersion: v1
kind: Service
metadata:
annotations:
name: my-ade-svc
spec:
type: ExternalName
# {Service Name}.{Namespace}.svc.cluster.local 형식으로 작성
externalName: ade-svc.namespace-a.svc.cluster.local
[Ingress 배포]
1. Ingress 매니페스트 파일을 작성 및 수정합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-uri
annotations:
cert-manager.io/cluster-issuer: "letsencrypt"
cert-manager.io/acme-challenge-type: http01
spec:
ingressClassName: nginx
tls:
- hosts:
- kong-lab.site
secretName: cafe-secret
rules:
- host: kong-lab.site
http:
paths:
- path: /tea
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: Prefix
backend:
service:
name: coffee-svc
port:
number: 80
- path: /ade
pathType: Prefix
backend:
service:
# External Name Service의 이름을 입력합니다.
name: my-ade-svc
port:
number: 80
[확인]
아래처럼 domain/ade 확인 결과 정상적으로 접속 되는 것을 확인할 수 있습니다.
[최종 아키텍처]
'Kubernetes' 카테고리의 다른 글
Kubernetes Network Study #2(Service to Pod) (0) | 2023.11.23 |
---|---|
Kubernetes Network Study #1 (Pod to Pod, CNI. Calico) (0) | 2023.11.22 |
[NKS]Velero를 활용하여 특정 네임스페이스를 통으로 백업하고 복원하기 (2) | 2023.07.31 |
Kubernetes 인증서 관리를 위한 가이드: cert-manager와 issuer 설치 (1) | 2023.07.25 |
CKA 합격후기(2023.05.29 합격) (0) | 2023.07.17 |