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
'Kubernetes' 카테고리의 다른 글
Ubuntu 24.04 LTS Kubernetes 설치 (0) | 2024.10.03 |
---|---|
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 |