2023-10-11 13:21:58
728x90
728x90

Service:

쿠버네티스에서 서비스란 네트워크 서비스로 노출하는 추상화 방법을 의미하는데, Pod를 논리적으로 구분하여 접근하도록 하는 것이다

서비스에서는 라벨 셀렉터(Label Selector)를 사용하여, 관리하고자 하는 Pod들을 정의할 수 있다.

 

쿠버네티스가 제공하는 서비스의 종류는 다음과 같다.

  • ClusterIP: 기본 서비스 타입으로, 쿠버네티스 클러스터 내부에서 사용 가능하여, 클러스터 내부의 Node나 Pod에서 이 ClusterIP를 이용해서 서비스에 연결된 Pod와 통신
  • External Name: 서비스를 externalName의 값이랑 매치하여 사용하고, 클러스터 내부에서 외부로 접근할 때 사용
  • NodePort: 각 노드의 지정된 포트를 할당하는 방식 
  • Load Balancer: Pod를 클라우드(KT Cloud와 같은 CSP 사업자)에서 제공해주는 LoadBalancer와 연결해서 그 LoadBalancer의 IP를 이용



ClusterIP

Cluster내에서만 서비스에 접속가능

vi svcalnginx.yml

apiVersion: v1
kind: Service
metadata:
  name: svc-clusterip
  labels:
    env: prod
spec:
  type: ClusterIP
  ports:
  - port: 8080 clusterip의 port 지정
    targetPort: 80 pod의 포트 지정
    protocol: TCP
  selector: template의 label이 들어가야함
    vol: host
-----------------------------------------------------------------------------------------------------------------

 

NodePort

각 Node의 IP에 서비스 노출

vi nodeportalnginx.yml

apiVersion: v1
kind: Service
metadata:
  name: nodeport-dep
  labels:
    env: prod
spec:
  type: NodePort
  ports:
  - port: 8080                   clusterip의 port 지정
    targetPort:                  80 pod의 포트 지정
    nodePort: 32000        nodeport의 포트 지정
    protocol: TCP
  selector:
    vol: host
-----------------------------------------------------------------------------------------------------------------
loadbalancer

k get configmap kube-proxy -n kube-system -o yaml | grep strictARP
k get configmap kube-proxy -n kube-system -o yaml | sed -e "s/strictARP: false/strictARP: true/" | kubectl apply -f - -n kube-system
wget https://raw.githubusercontent.com/metallb/metallb/v0.13.11/config/manifests/metallb-native.yaml
k apply -f metallb-native.yaml

vi ipaddresspool.yml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 10.0.0.201-10.0.0.210

vi l2adv.yml

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: example
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.11/config/manifests/metallb-native.yaml
kubectl apply -f ipaddresspool.yml
kubectl apply -f l2adv.yml
kubectl get ipaddresspool -n metallb-system
kubectl get l2advertisements -n metallb-system

vi loadhostdep.yml

apiVersion: v1
kind: Service
metadata:
  name: loadbal
  labels:
    net: load
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    vol: host
kubectl apply -f loadhostdep.yml
kubectl get service

728x90

'Kubernetes' 카테고리의 다른 글

Kubernetes Ingress, Autoscaling, Network  (0) 2023.10.23
Kubernetes Replicaset, Deployment, Pod Container에 파일 복사  (0) 2023.10.10
Kubernetes Scheduling, Labels  (0) 2023.10.05
Kubernetes pod, namespace  (0) 2023.10.05
Kubernetes 설치  (0) 2023.10.05