쿠버네티스에서 서비스란 : 외부에서 쿠버네티스 클러스터에 접속하는 방법
노드포트 오브젝트 스펙 중 기존 오브젝트 스펙에서 다른부분
ports 하위 : 사용할 프로토콜과 포트들을 지정
type : 서비스 타입 설정
apiVersion: v1
kind: Service
metadata:
name: np-svc
spec:
selector:
app: np-pods
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 30000
type: NodePort
expose : 파드에 걸쳐 트래픽을 로드 밸런스하도록 새로운 서비스 오브젝트를 생성
expose 로 노드포트 서비스 생성, expose 를 사용하여 서비스로 내보낼 deployment 를 no-pods 로 지정
해당 서비스 명은 np-svc-v2, 타입 NodePort(서비스 타입 대소문자 구분)
서비스가 파드로 보내줄 연결 포트 80(파드 포트)번 지정
kubectl expose deployment np-pods --type=NodePort --name=np-svc-v2 --port=80
고유한 주소를 제공해 사용 목적에 따라 다른 응답을 제공
트래픽에 대한 L4/L7 로드밸런서와 보안 인증서를 처리하는 기능 제공
노드포트 서비스를 NGINX 인그레스 컨트롤러 구성
순서 : 사용자 -> 노드 -> 노드포트 서비스 -> ClusterIP 서비스 -> 파드
kubectl apply -f [ingress file path]
메타데이터의 기록 및 변경, rewrite-target 을 / (기본 주소)로 지정
annotations: nginx.ingress.kubernates.io/rewrite-target: /
rules : 규칙 지정
rules - path : 경로 규칙
rules - backend - 하위 : 연결되는 서비스와 포트
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
nginx.ingress.kubernates.io/rewrite-target: /
spec:
rule:
- http:
paths:
- path:
backend:
serviceName: hname-svc-default
servicePort: 80
- path: /ip
backend:
serviceName: ip-svc
servicePort: 80
- path: /your-directory
backend:
serviceName: your-svc
servicePort: 80
인그레스 pod 확인, 네임스페이스가 다르므로 옵션을 설정한다 -n : -namespace
kubectl get pods -n ingress-nginx
kubectl expose deployment [deployment name] --type=LoadBalancer --name=[service name]
MetalLB 구성에 의한 순서
사용자 -> 로드밸런서 서비스 -> 파드
MetalLB Controller : 작동 방식(Protocol) 을 정의하고 EXTERNAL-IP 를 부여해 관리
MetalLB Speaker : 정해진 작동 방식(L2/ARP, L3/BGP) 에 따라 경로를 만들 수 있도록
네트워크 정보를 광고하고 수집해 각 파드의 경로를 제공
ConfigMap 설정(파일) : 설정이 정의된 포맷
kubectl create deploy [deploy name] --image=[image name]
kubectl apply -f [MetalLB file path]
config : 설정 내용
address-pools : 세부 설정
address-pools - protocol : 로드밸런서 동작 방식
address-pools - address : 로드밸런서의 External IP
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: nginx-ip-range
protocol: layer2
addresss:
- 111.111.1.11-111.111.1.1x
kubectl get services 를 입력하면
EXTERNAL-IP 에 IP 가 출력되는데 ConfigMap 을 통해 부여한 IP 를 확인
HPA : Horizontal Pod Autoscaler
top : 파드 자원 사용량 체크, 메트릭 서버가 없으면 NotFound Error 발생
kubectl top pods
메트릭 서버(Metrics-Server) : kubelet 이 계측값을 수집하여 전달한것을 받아서 관리
kubectl appply -f [Metrics config file path]
min : 파드 최소 수, max : 파드 최대 수, cpu-percent : cpu 사용량 퍼센트가 설정값 보다 오르면 autoscale 진행
kubectl autoscale deployment [deployment name] --min=1 --max=30 --cpu-percent=50