매니페스트 예시
apiVersion: v1
kind: Service
metadata:
name: sample-lb
spec:
type: LoadBalancer
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
nodePort: 30082
selector:
app: sample-app
spec.ports[].port : LoadBalancer에 할당되는 가상 IP와 ClusterIP에서 수신할 포트 번호spec.ports[].targetPort : 목적지 컨테이너 포트 번호spec.ports[].nodePort : 모든 쿠버네티스 노드 IP 주소에서 수신할 포트 번호LoadBalancer 서비스 생성 직후에 서비스를 확인하면 External-IP 부분이 <pending> 상태로 되어 있다.
내부통신을 위해 ClusterIP도 자동 할당된다.
실제 서비스 운영 환경에서는 외부로부터 요청을 수신하는 IP 주소에 대해 DNS 설정 등의 이유로 고정 IP를 사용한다.
spec.loadBalancerIP로 외부 LoadBalancer에서 사용하는 IP 주소를 지정
apiVersion: v1
kind: Service
metadata:
name: sample-lb-fixip
spec:
type: LoadBalancer
loadBalancerIP: xxx.xxx.xxx.xxx
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
selector:
app: sample-app
spec.loadBalancerSourceRanges를 통해 쿠버네티스 노드 측의 iptables를 사용하여 접속 제어 처리가 이루어진다.apiVersion: v1
kind: Service
metadata:
name: sample-lb-fw
spec:
type: LoadBalancer
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
selector:
app: sample-app
loadBalancerSourceRanges:
- 10.0.0.0/8