Net Eng

[CKA] - Ingress 구성 본문

Cloud/Kubernetes

[CKA] - Ingress 구성

欲心 2024. 1. 23. 16:22

[선수 작업]

kubectl config set-context k8s --user=kubernetes-admin --cluster=cluster.local
kubectl apply -f - <<EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: appjs
  namespace: ingress-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: appjs
  template:
    metadata:
      labels:
        app: appjs
    spec:
      containers:
      - image: whatwant/node-web:2.0
        name: appjs
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: appjs-service
  namespace: ingress-nginx
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: appjs
EOF

 


 

[문제]

  • 작업 클러스터: k8s
  • Application Service 운영
    • ingress-nginx namespace에 nginx 이미지를 app=nginx 레이블을 가지고 실행하는 nginx pod를 구성하시오.
    • 앞서 생성한 nginx pod를 서비스하는 nginx service를 생성하시오.
    • 현재 appjs-service Service는 이미 동작 중이다. 별도 구성이 필요 없다.
  • Ingress 구성
    • app-ingress.yaml 파일을 생성하여 다음 조건의 ingress 서비스를 구성하시오.
      • ingress name: app-ingress
      • IP:NODE_PORT**/** 접속했을 때 nginx 서비스로 연결
      • IP:NODE_PORT**/app** 접속했을 때 appjs-service 서비스로 연결
      • Ingress 구성에 다음의 annotations을 포함하시오.

 

[풀이]

kubectl config use-context k8s

* k8s 클러스터 사용

 

kubectl run nginx --image=nginx --labels=app=nginx --port=80 -n ingress-nginx

* nginx Pod 생성

 

kubectl expose pod nginx --port 80 --target-port=80 -n ingress-nginx

* Service 생성

 

kubectl get svc -n ingress-nginx
kubectl describe svc nginx -n ingress-nginx

* Service 정보 확인

 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  namespace: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80
      - path: /app
        pathType: Prefix
        backend:
          service:
            name: appjs-service
            port:
              number: 80

* 문제 내용을 바탕으로 ingress의 yaml 파일 작성

 

kubectl apply -f app-ingress.yaml

* yaml 파일 실행

 

kubectl get ingress -n ingress-nginx

* Ingress 확인

 

kubectl describe ingress app-ingress -n ingress-nginx

* 포트 확인

 

curl node1:31894/
curl node1:31894/app

* 접속 확인

 

Rule에 따른 접속 확인

 


[참고]

 

인그레스(Ingress)

URI, 호스트네임, 경로 등과 같은 웹 개념을 이해하는 프로토콜-인지형(protocol-aware configuration) 설정 메커니즘을 이용하여 HTTP (혹은 HTTPS) 네트워크 서비스를 사용 가능하게 한다. 인그레스 개념은

kubernetes.io