본문 바로가기

인프라/Kubernetes

Kubernetes 인그레스 컨트롤러

2023.08.27 - [인프라/Kubernetes] - Kubernetes 실습 및 서비스 구축

 

Kubernetes 실습 및 서비스 구축

예상 k8s 서비스 아키텍쳐 Kubernetes 란? 쿠버네티스는 컨테이너화된 서비스를 쉽고 빠르게 배포,확장,관리하기 자동화 해주는 오픈소스 플랫폼입니다. k8s 사용 이유 쿠퍼네티스는 분산 되어 있는

younyellow.tistory.com

다시 로컬로 돌아와서 현재 상태

여기서 인그레스 컨트롤러를 적용하여 사용자가 지정한 규칙에 따라 적절한 마이크로 서비스로 라우팅 해줄 예정입니다.

사용 중인 노드 포트 서비스 종료

root@DESKTOP-Q4VBHGG:/home/yellownyou# kubectl delete service node-port
service "node-port" deleted
root@DESKTOP-Q4VBHGG:/home/yellownyou# kubectl delete service node-port2
service "node-port2" deleted

인그레스 컨트롤러 관련 리소스 설치

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/cloud/deploy.yaml

서비스 1,서비스2 각각 클러스터 ip 생성

kind-clusterip-service1.yaml

apiVersion: v1
kind: Service
metadata:
 name: cluster-ip-service1
spec:
 ports:
   - name: web-server-port1
     port: 7000
     targetPort: 8080
 selector:
   app: my-web-server1
 type: ClusterIP

kind-clusterip-service2.yaml

apiVersion: v1
kind: Service
metadata:
 name: cluster-ip-service2
spec:
 ports:
   - name: web-server-port2
     port: 7001
     targetPort: 8080
 selector:
   app: my-web-server2
 type: ClusterIP

kubectl apply -f kind-clusterip-service1.yaml

kubectl apply -f kind-clusterip-service2.yaml

인그레스 yaml 파일 작성

kind-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
 name: ingress
 annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
 ingressClassName: nginx
 rules:
 - http:
      paths:
      - path: /(.*)
        pathType: Prefix
        backend:
          service:
            name: cluster-ip-service1
            port:
              number: 8080
      - path: /service2/(.*) 
        pathType: Prefix
        backend:
          service:
            name: cluster-ip-service2
            port:
              number: 8080

annotactions:

   nginx.ingress.kubernetes.io/rewrite-target: / 

이걸 사용하면 경로를 /service2 부분을 빼고 연결 해 줍니다.

root@DESKTOP-Q4VBHGG:/home/yellownyou# kubectl apply -f kind-ingress.yaml
root@DESKTOP-Q4VBHGG:/home/yellownyou# kubectl get service --all-namespaces
NAMESPACE       NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
default         cluster-ip-service1                  ClusterIP      10.96.254.222   <none>        7000/TCP                     7m7s
default         cluster-ip-service2                  ClusterIP      10.96.173.147   <none>        7001/TCP                     7m4s
default         kubernetes                           ClusterIP      10.96.0.1       <none>        443/TCP                      3d19h
default         nfs-service                          ClusterIP      10.96.192.4     <none>        2049/TCP,111/UDP             3d19h
ingress-nginx   ingress-nginx-controller             LoadBalancer   10.96.75.97     <pending>     80:30990/TCP,443:32256/TCP   12m
ingress-nginx   ingress-nginx-controller-admission   ClusterIP      10.96.94.133    <none>        443/TCP                      12m
kube-system     kube-dns                             ClusterIP      10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP       3d19h
kube-system     metrics-server                       ClusterIP      10.96.117.28    <none>        443/TCP                      39m

테스트

정상적으로 작동 하는 것을 볼 수 있습니다.

관련 코드는

https://github.com/Sihyun3/LearningKubernetes

 

GitHub - Sihyun3/LearningKubernetes

Contribute to Sihyun3/LearningKubernetes development by creating an account on GitHub.

github.com

에서 확인 할 수 있습니다.