TIL Kubernetes 4

sundays·2022년 10월 14일
0

cluster IP

  • Pod들이 cluster 내부의 다른 리소스들과 통신할 수 있도록 해주는 가상 cluster 전용 IP
  • cluster 내부에서만 접근 가능
  • spec.selector에서 지정된 label로 여러 Pod들이 존재할 경우 Service는 그 Pod들의 외부 요청( request )을 전달할 endpoint로 선택하여 트래픽을 분배( LoadBalancing )
  • endpoint를 수동으로 직접 지정해줄때는 Endpoints 객체를 이용하여 Service와 mapping 한다. 주의점은 endpoint를 명시할 IP는 loopback이면 안된다

NodePort

  • 외부에서 node IP의 특정 Port( : )로 들어오는 요청을 감지하여 해당 port와 연결된 Pod로 트래픽 전달
  • spec.ports에 nodePort를 추가로 지정
    • nodePort는 외부에서 node 안의 특정 서비스로 접근할 수 있도록 지정된 node의 특정 port 의미
    • nodePort의 범위는 30000 ~ 32767, 미지정시 임의의 Port 부여
  • spec.selector에 해당하는 모든 파드들에 NordPort에 의해 동일한 LoadBalancing이 적용된다.
apiVersion: v1
kind: Service
metadata: 
 name: my-nodeport-service
spec:
 selector:   
   app: my-app
 type: NodePort
 ports: 
 - name: http
   port: 80         # Service에 노출되는 Port
   targetPort: 80   # Pod(애플리케이션)을 노출하는 Port
   nodePort: 30036  # 외부 사용자가 애플리케이션에 접근하기 위한 Port
   protocol: TCP

Load balancer

  • 별도 외부 LoadBalancer를 제공하는 cloud( AWS, GCP, Azure등 ) 환경을 고려하여 해당 LoadBalancer를 cluster의 Service로 프로비저닝할 때 사용
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 80			# 서비스를 노출하는 포트
      targetPort: 80		# 애플리케이션(파드)를 노출하는 포트
  clusterIP: 10.0.171.239	# 클러스터 IP
  selector:
    app: myapp
    type: frontend
status:
  loadBalancer:			# 프로비저닝된 로드 밸런서 정보
    ingress:
      - ip: 192.0.2.127

ExternelName

  • Service에 selector 대신 name을 직접 명시하고자 할 때 사용
  • spec.externalName 속성에 필요한 DNS 주소 기입하면 cluster의 DNS 서비스가 해당 주소에 대한 CNAME 레코드 반환
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
  namespace: prod
spec:
  type: ExternalName
    externalName: my.database.example.com
profile
develop life

0개의 댓글