Cloud & Architecture/Kubernetes

GCP GKE Kubernetes 인그레스(Ingress), 노드포트(Nodeport) 접속

Karla Ko 2023. 10. 27. 16:40
728x90

MSA (Micro Service Architecture) 로 개발되어 서비스간의 라우팅이 필요한 구조에서는 Ingress 를 사용
 Service의 NodePort : 온프레미스 환경에서 사용
Service의 LoadBalancer: 퍼블릭 클라우드 환경에서 사용
Servic는 클러스터 외부로 PORT를 노출하는 기능과 부하분산기능을 수행합니다. 그리고 이점은 Ingress 도 동일합니다. 차이점은 Ingress는 L7이고 Service는 L4라는 점입니다.

 

1. 노드 포트

 

2. 파드 생성 (디플로이먼트)

vi web-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  namespace: default
spec:
  selector:
    matchLabels:
      run: web
  template:
    metadata:
      labels:
        run: web
    spec:
      containers:
      - image: gcr.io/google-samples/hello-app:1.0
        imagePullPolicy: IfNotPresent
        name: web
        ports:
        - containerPort: 8080
          protocol: TCP

 

kubectl apply -f web-deployment.yaml

 

kubectl get deploy

 

 

3. 서비스 생성

vi web-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: default
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    run: web
  type: NodePort

 

kubectl apply -f web-service.yaml

 

kubectl get svc

 

 

4. 인그레스 생성

vi basic-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: basic-ingress
spec:
  rules:
  - http:
      paths:
      backend:
         service: 
            name : web
            port: 
              number: 8080
      path: /
      pathType: Prefix

 

kubectl apply -f basic-ingress.yaml

 

kubectl get ingress

 

작업부하 > web > 개요 > 노출중인 서비스

 

5. 접속

 

1) 노드포트 [노드IP]:[노드포트]

GKE에서 쿠버네티스를 사용하는 경우 각 노드의 랜덤한 포트에 접근하기 위해 별도로 방화벽 설정을 추가해야 합니다. AWS에서도 마찬가지로 Security Group의 별도의 Inbound 규칙을 추가해야 합니다.
gcloud compute firewall-rules create sun-nodeport-svc --allow=tcp:30650

 

 


실제 운영 환경에서 NodePort로 서비스를 외부에 제공하는 경우는 많지 않습니다.
 SSL 인증서 적용 라우팅과 같은 복잡한 설정을 서비스에 적용하는 것은 어렵기 때문입니다.

 

2) 인그레스 [인그레스IP]/[url]


LoadBalancer 타입의 서비스는 서비스를 생성함과 동시에 로드 밸런서를 새롭게 생성해 pod와 연결합니다. Nodeport는 각 노드의 IP를 알아야 pod에 접근할 수 있지만, LoadBalancer 타입의 서비스는 클라우드 플랫폼으로부터 도메인 이름과 IP를 할당받기 때문에 Nodeport보다 쉽게 pod에 접근할 수 있습니다.
 
단, 로드 밸런서를 동적으로 생성하는 기능을 제공하는 환경에서만 사용할 수 있습니다. AWS, GCP 등과 같은 클라우드 플랫폼 환경에서만 LoadBalancer 타입을 사용할 수 있으며, 가상 환경이나 온프레미스 환경에서는 사용이 어려울 수 있습니다.
온프레미스 환경에서 LoadBalancer 타입의 서비스를 사용하기 위해서는 MetalLB나 오픈스택과 같은 특수한 환경을 직접 구축해야 합니다. 

 

 

 

728x90