🐳 Container/K8S

[K8s] 쿠버네티스(Kubernetes) 서비스

heywantodo 2023. 3. 30. 17:42
728x90
반응형

쿠버네티스 (Kubernetes) 서비스

 

쿠버네티스 네트워크

  • Pod Network

: CNI에서 관리하는 Pod 간 통신에 사용되는 클러스터의 전체 네트워크

  • Service Network

: Service discovery를 위해 Kube-proxy가 관리하는 Cluster-wide 범위의 Virtual IP

 

 

🔎 CNI

: 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준

  • 컨테이너들의 네트워크를 연결
  • 컨테이너 삭제 시 할당된 자원을 제거

 

쿠버네티스 서비스

  • 파드를 통해 실행되고 있는 어플리케이션을 네트워크에 노출 시키는 가상의 컴포넌트
  • 파드가 외부와 통신할 수 있도록 클러스터 내부에서 고정적인 IP를 갖는 서비스를 이용할 수 있음

 

쿠버네티스 서비스 유형

1️⃣ ClusterIP (Private LoadBalancer, Default)

  • Pod 그룹의 단일 진입점 (Virtual IP) 생성
  • 10.96.0.0/12 (10.96.0.0 ~ 10.111.255.255) 범위 내에서 Random한 IP 할당
  • 클러스터 내부에서만 사용 가능

CLI

kubectl expose rs rs-appjs --type ClusterIP --port 80 --target-port 8080 \
--name svc-appjs

kubectl get services
curl [ip]

Yaml

  • dry run으로 Yaml 파일 생성
kubectl expose rs rs-appjs --type ClusterIP --port 80 --target-port 8080 --name \
svc-appjs --dry-run=client -o yaml > svc-appjs-lab.yaml
  • Label이 기준이기 때문에 잘 설정해야 함
vi svc-appjs-lab.yaml
~
apiVersion: v1
kind: Service
metadata:
  name: svc-appjs
spec:
  type: ClusterIP
  clusterIP: 10.100.100.100
  selector:
    app: appjs
  ports:
  - port: 80

 

🔎 Session Affinity

: 특정 클라이언트에서 생성된 모든 요청을 매번 같은 Pod로 연결

None과 ClientIP Type이 있음

apiVersion: v1
kind: Service
metadata:
  name: svc-session
spec:
  type: ClusterIP
  clusterIP: 10.100.100.101
  sessionAffinity: ClientIP
  selector:
    app: appjs
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080

 

🔎 ExternalPort

: 노드의 IP에 Port를 열어줌

apiVersion: v1
kind: Service
metadata:
  name: svc-external
spec:
  type: ClusterIP
  clusterIP: 10.100.100.103
  selector:
    app: appjs
  externalIPs:
  - 172.31.14.246 #Node1의 IP
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080

 

2️⃣ NodePort(외부에서 접속 가능한 Port)

  • ClusterIP가 생성된 후 모든 WorkerNode에 외부에서 접속 가능 한 포트가 예약
  • ClusterIP + NodePort 오픈(30000 - 32767)
apiVersion: v1
kind: Service
metadata:
  name: svc-nodeport
spec:
  type: NodePort
  selector:
    app: appjs
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
    nodePort: 30123

 

3️⃣ LoadBalancer

  • 클라우드 인프라스트럭처오픈스택 클라우드에 적용
  • LoadBalancer를 자동으로 프로 비전하는 기능 지원 
apiVersion: v1
kind: Service
metadata:
  name: svc-lb
spec:
  type: LoadBalancer
  selector:
    app: appjs
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080

 

4️⃣ ExternalName

  • 클러스터 안에서 외부에 접속 시 사용할 도메인을 등록해서 사용
  • 클러스터 도메인이 실제 외부 도메인으로 치환되어 동작
apiVersion: v1
kind: Service
metadata:
  name: custom-svc
spec:
  type: ExternalName
  externalName: www.bespinglobal.com

 

 

728x90
반응형