반응형
Ingress
- 클러스터 내의 서비스에 대한 외부 접근을 관리하는 Kubernetes API
- HTTP나 HTTPS를 통해 클러스터 내부의 서비스를 외부로 노출
- L7 스위치 역할을 논리적으로 수행
- 클러스터로 접근하는 URL 별로 다른 서비스에 트래픽을 분산
- Ingress 기능
- Service에 외부 URL을 제공
- 트래픽을 로드밸런싱
- SSL 인증서 처리
- Virtual hosting을 지정
예제1
1) ingress-nginx namespace에 nginx pod를 구성하시오.
- label : app=nginx
2) 테스트 appjs-servic와 nginx 서비스를 구성하시오 (실제 시험에선 서비스는 이미 구성되어 있음)
3) app-ingress.yaml 파일을 생성하여 다음 조건의 ingress 를 구성하시오.
- name: app-ingress
- NODE_PORT:30080/ 접속했을 때 nginx 서비스로 연결
- NODE_PORT:30080/app 접속했을 때 appjs-service 서비스로 연결
4) Ingress 구성에 다음의 annotations을 포함시키시오.
- annotations: kubernetes.io/ingress.class: nginx
풀이
1) Namespace 및 Pod 생성
kubectl create namespace ingress-nginx
kubectl run nginx --image=nginx -n ingress-nginx --port 80 --labels=app=nginx
kubectl run appjs --image=nginx -n ingress-nginx --port 80 --labels=app=appjs
kubectl get pod -n ingress-nginx
2) 테스트 서비스 생성 (실제 시험에선 서비스는 이미 구성되어 있음)
kubectl expose pod appjs --name=appjs-service -n ingress-nginx
kubectl expose pod nginx --name=nginx-service -n ingress-nginx
3) Ingress 생성 yaml (Ingress Controller 사전 설치 필요)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
namespace: ingress-nginx
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
- http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: appjs-service
port:
number: 80
kubectl apply -f app-ingress.yaml
curl k8s-master:30080
반응형
Core DNS
- 쿠버네티스에서 클러스터 안에서만 사용하는 DNS를 설정
- CoreDNS는 쿠버네티스의 기본 DNS
- 클러스터 내의 모든 Service에는 DNS 네임이 할당됨.
- 클러스터에서 동작되는 모든 Pod의 /etc/resolv.conf 에 정의
- 특정 Pod에서 service name이나 pod name으로 Access 가능
- svc-name.namespace.svc.cluster.local
- pod-ip.namespace.pod.cluster.local
kubectl exec -it -n ingress-nginx appjs /bin/bash
예제
1) image nginx를 사용하는 resolver pod 생성
2) resolver-service라는 service를 구성
3) 클러스터 내에서 service와 pod dns 조회 테스트.
- dns 조회에 사용하는 pod 이미지는 busybox:1.28 사용
- service와 pod 이름 조회는 nlsookup을 사용
4) 조회결과 저장
- service 조회 결과는 /var/CKA2022/nginx.svc에 저장
- pod name 조회 결과는 /var/CKA2022/nginx.pod에 저장
풀이
1) Pod 생성
kubectl run resolver --image=nginx --port=80
2) Service 생성
kubectl expose pod resolver --name resolver-service --port=80
3) dns 조회 테스트
# Pod DNS 조회 테스트
kubectl run test-nslookup --image=busybox:1.28 -it --restart=Never --rm -- nslookup 192.168.126.10
# Service DNS 조회 테스트
kubectl run test-nslookup --image=busybox:1.28 -it --restart=Never --rm -- nslookup 10.96.165.219
4) dns 조회 결과 저장
# Pod DNS 조회결과 저장
kubectl run test-nslookup --image=busybox:1.28 -it --restart=Never --rm -- nslookup 192-168-126-10.resolver-service.default.svc.cluster.local > /var/CKA2022/nginx.pod
# Service DNS 조회결과 저장
kubectl run test-nslookup --image=busybox:1.28 -it --restart=Never --rm -- nslookup resolver-service > /var/CKA2022/nginx.svc
끝.
Thank you!
반응형
'Tools > Kubernetes' 카테고리의 다른 글
[CKA 도전 시리즈] 14. Troubleshooting (0) | 2023.03.01 |
---|---|
[CKA 도전 시리즈] 13. Storage (0) | 2023.02.26 |
[CKA 도전 시리즈] 11. Network Policy (0) | 2023.02.13 |
[CKA 도전 시리즈] 10. Service ClusterIP (0) | 2023.02.07 |
[CKA 도전 시리즈] 9. Configmap / Secret (0) | 2023.01.26 |