- ingress 를 사용하면 deployment, service 를 띄우고,
ingress 와 연동까지 하나의 문서로 할 수 있다.
✏️ 적용하기
- inginx 를 띄워서 접속까지 해볼 예정이다.
📍 디렉토리 생성
mkdir -p /kube/ingress-test && cd /kube/ingress-test
📍 설정파일 생성
- deployment, service, ingress 연결까지 한번에 할 수 있는 설정파일이다.
vim ingress-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy-main
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx-main
template:
metadata:
labels:
app: nginx-main
spec:
containers:
- image: nginx
name: nginx
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: nginx-main
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: lldj.site
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: my-service
port:
number: 80
apiVersion: apps/v1
kind: Deployment
metadata:
name: 디플로이먼트 이름
labels:
app: 디플로이, 서비스, 인그레스 패키지의 이름
spec:
replicas: 복제 레플리카셋 수
selector:
matchLabels:
app: nginx-main
template:
metadata:
labels:
app: 디플로이, 서비스 패키지의 식별값 (유지보수 용)
spec:
containers:
- image: 도커허브 이미지명
name: 컨테이너의 이름
- containerPort: 파드의 포트
env:
- name: 환경변수 명
value: 환경변수 값
---
apiVersion: v1
kind: Service
metadata:
name: 서비스 이름
spec:
selector:
app: 디플로이, 서비스 패키지의 식별값 (유지보수 용)
ports:
- protocol: 프로토콜
port: 외부 포트
targetPort: 내부 포트
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: 인그레스명
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: 호스트
http:
paths:
- path: 호스트 하위 경로
pathType: ImplementationSpecific
backend:
service:
name: 라우팅 할 서비스 이름
port:
number: 라우팅 할 서버 포트
📍 설정파일 실행
- 설정파일을 실행하면 한번에 생성이 된것을 확인할 수 있다.
kubectl apply -f ingress-test.yaml
✏️ Nginx 접속하기
- 준비된 domain 이 없기 때문에 dns 에 가짜 도메인을 추가 해봤다.
vim /etc/hosts
- 추가한 domain 으로 curl 명령을 하면 설정파일로 띄운 nginx 에 접속하게 된다.
curl 추가한 도메인
- 이 외에도 공인 ip 를 입력하거나,
로컬 환경의 dns 를 수정해주면 nginx 에 정상적으로 접속할 수 있게된다.