본문 바로가기
도커&쿠버네티스

[katakoda] Networking Introduction

by bzerome240 2022. 3. 22.

Kubernetes에는 Pod 및 서비스가 클러스터 네트워크 내부 및 외부에서 통신할 수 있도록 하는 고급 네트워킹 기능이 있습니다.

Kubernetes 서비스는 Pod 집합에 액세스하는 방법에 대한 정책 및 접근 방식을 정의하는 요약입니다. 

서비스를 통해 액세스되는 pod 세트는 레이블 선택기를 기반으로 합니다.

 

핵심 타입

  • Cluster IP
  • Target Ports
  • NodePort
  • External IPs
  • Load Balancer

 

1 Cluster IP

 

클러스터 IP는 쿠버네티스 서비스를 생성할 때 기본 접근 방식이다.

서비스에는 다른 구성요소가 포드에 엑세스하는 데 사용할 수 있는 내부 IP가 할당된다.

 

단일 IP주소를 사용하면 서비스가 여러 Pod에서 로드밸런싱될 수 있다.

 

YAML

apiVersion: v1
kind: Service
metadata:
  name: webapp1-clusterip-svc
  labels:
    app: webapp1-clusterip
spec:
  ports:
  - port: 80
  selector:
    app: webapp1-clusterip
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: webapp1-clusterip-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: webapp1-clusterip
    spec:
      containers:
      - name: webapp1-clusterip-pod
        image: katacoda/docker-http-server:latest
        ports:
        - containerPort: 80
---
kubectl apply -f clusterip.yaml.

 

배포후에 할단된 ClusterIP를 통해 서비스에 엑세스할 수 있다

export CLUSTER_IP=$(kubectl get services/webapp1-clusterip-svc -o go-template='{{(index .spec.clusterIP)}}')
echo CLUSTER_IP=$CLUSTER_IP
curl $CLUSTER_IP:80

 

여러 pod에서 서비스 로드 밸런서가 어떻게 작동하는지 보여준다.

curl $CLUSTER_IP:80

 

2 TargetPort

 

: 애플리케이션이 수신 대기하도록 구성된 포트

TargetPort를 사용하면 애플리케이션이 수신 대기 중인 포트에서 서비스를 사용할 수 있는 포트를 분리할 수 있다.

포트는 외부에서 애플리케이션에 액세스하는 방법이다

 

 

서비스 및 pod 추가 배포하기

kubectl apply -f clusterip-target.yaml

 

서비스 및 포드가 배포된 후 클러스터IP를 통해 엑세스할 수 있지만, 정의된 포트 8080에서 엑세스할 수 있다.

export CLUSTER_IP=$(kubectl get services/webapp1-clusterip-targetport-svc -o go-template='{{(index .spec.clusterIP)}}')
echo CLUSTER_IP=$CLUSTER_IP
curl $CLUSTER_IP:8080
curl $CLUSTER_IP:8080

 

 

3 NodePort

 

TargetPort와 클러스터IP는 클러스터 내부에서 사용할 수 있도록 하는 반면

NodePort는 정의된 정적 포트를 통해 각 노드의 IP에 서비스를 노출한다.

클러스터 내의 어떤 노드에 엑세스하든지 정의된 포트 번호를 기반으로 서비스에 연결할 수 있다.

 

YAML

apiVersion: v1
kind: Service
metadata:
  name: webapp1-nodeport-svc
  labels:
    app: webapp1-nodeport
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30080
  selector:
    app: webapp1-nodeport
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: webapp1-nodeport-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: webapp1-nodeport
    spec:
      containers:
      - name: webapp1-nodeport-pod
        image: katacoda/docker-http-server:latest
        ports:
        - containerPort: 80
---

 

정의된 NodePort에서 노드의 IP 주소를 통해 서비스에 연결하기

curl 172.17.0.95:30080

 

 

 

 

728x90
반응형

댓글