매니페스트 예시
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