8.3. 서비스를 사용하여 가상 머신 노출
Service
오브젝트를 생성하여 클러스터 또는 클러스터 외부에 가상 머신을 노출할 수 있습니다.
8.3.1. 서비스 정보
Kubernetes 서비스는 클라이언트의 네트워크 액세스를 포드 세트에서 실행되는 애플리케이션에 노출합니다. 서비스는 추상화, 로드 밸런싱 및 NodePort
및 LoadBalancer
유형의 경우 외부 세계에 노출을 제공합니다.
- ClusterIP
-
내부 IP 주소에 서비스를 노출하고 클러스터 내의 다른 애플리케이션에 DNS 이름으로 노출합니다. 단일 서비스는 여러 가상 머신에 매핑할 수 있습니다. 클라이언트가 서비스에 연결하려고 하면 사용 가능한 백엔드 간에 클라이언트 요청이 부하 분산됩니다.
ClusterIP
는 기본 서비스 유형입니다. - NodePort
-
클러스터에서 선택한 각 노드의 동일한 포트에 서비스를 노출합니다.
NodePort
를 사용하면 노드 자체에 클라이언트에서 외부에서 액세스할 수 있는 한 클러스터 외부에서 포트에 액세스할 수 있습니다. - LoadBalancer
- 현재 클라우드에 외부 로드 밸런서를 생성하고(지원되는 경우) 고정 외부 IP 주소를 서비스에 할당합니다.
온프레미스 클러스터의 경우 MetalLB Operator를 배포하여 로드 밸런싱 서비스를 구성할 수 있습니다.
8.3.2. 듀얼 스택 지원
클러스터에 대해 IPv4 및 IPv6 이중 스택 네트워킹을 사용하도록 설정한 경우 Service
개체에 spec.ipFamilyPolicy
및 spec.ipFamilies
필드를 정의하여 IPv4, IPv6 또는 둘 다 사용하는 서비스를 생성할 수 있습니다.
spec.ipFamilyPolicy
필드는 다음 값 중 하나로 설정할 수 있습니다.
- SingleStack
- 컨트롤 플레인은 처음 구성된 서비스 클러스터 IP 범위를 기반으로 서비스의 클러스터 IP 주소를 할당합니다.
- PreferDualStack
- 컨트롤 플레인은 듀얼 스택이 구성된 클러스터에서 서비스에 IPv4 및 IPv6 클러스터 IP 주소를 모두 할당합니다.
- RequireDualStack
-
이 옵션은 듀얼 스택 네트워킹이 활성화되지 않은 클러스터에 실패합니다. 듀얼 스택이 구성된 클러스터의 경우 해당 동작은 값이
PreferDualStack
으로 설정된 경우와 동일합니다. 컨트롤 플레인은 IPv4 및 IPv6 주소 범위의 클러스터 IP 주소를 할당합니다.
spec.ipFamilies
필드를 다음 배열 값 중 하나로 설정하여 단일 스택에 사용할 IP 제품군을 정의하거나 이중 스택의 IP 제품군 순서를 정의할 수 있습니다.
-
[IPv4]
-
[IPv6]
-
[IPv4, IPv6]
-
[IPv6, IPv4]
8.3.3. 명령줄을 사용하여 서비스 생성
명령줄을 사용하여 서비스를 생성하고 VM(가상 머신)과 연결할 수 있습니다.
사전 요구 사항
- 서비스를 지원하도록 클러스터 네트워크를 구성했습니다.
프로세스
VirtualMachine
매니페스트를 편집하여 서비스 생성 레이블을 추가합니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: running: false template: metadata: labels: special: key 1 # ...
- 1
spec.template.metadata.labels
스탠자에special: key
를 추가합니다.
참고가상 머신의 라벨은 Pod로 전달됩니다.
special: 키
레이블은서비스
매니페스트의spec.selector
속성의 레이블과 일치해야 합니다.-
VirtualMachine
매니페스트 파일을 저장하여 변경 사항을 적용합니다. VM을 노출하는
서비스
매니페스트를 생성합니다.apiVersion: v1 kind: Service metadata: name: example-service namespace: example-namespace spec: # ... selector: special: key 1 type: NodePort 2 ports: 3 protocol: TCP port: 80 targetPort: 9376 nodePort: 30000
-
서비스
매니페스트 파일을 저장합니다. 다음 명령을 실행하여 서비스를 생성합니다.
$ oc create -f example-service.yaml
- VM을 다시 시작하여 변경 사항을 적용합니다.
검증
Service
오브젝트를 쿼리하여 사용 가능한지 확인합니다.$ oc get service -n example-namespace