8.3. 서비스를 사용하여 가상 머신 노출


Service 오브젝트를 생성하여 클러스터 또는 클러스터 외부에 가상 머신을 노출할 수 있습니다.

8.3.1. 서비스 정보

Kubernetes 서비스는 클라이언트의 네트워크 액세스를 포드 세트에서 실행되는 애플리케이션에 노출합니다. 서비스는 추상화, 로드 밸런싱 및 NodePortLoadBalancer 유형의 경우 외부 세계에 노출을 제공합니다.

ClusterIP
내부 IP 주소에 서비스를 노출하고 클러스터 내의 다른 애플리케이션에 DNS 이름으로 노출합니다. 단일 서비스는 여러 가상 머신에 매핑할 수 있습니다. 클라이언트가 서비스에 연결하려고 하면 사용 가능한 백엔드 간에 클라이언트 요청이 부하 분산됩니다. ClusterIP 는 기본 서비스 유형입니다.
NodePort
클러스터에서 선택한 각 노드의 동일한 포트에 서비스를 노출합니다. NodePort 를 사용하면 노드 자체에 클라이언트에서 외부에서 액세스할 수 있는 한 클러스터 외부에서 포트에 액세스할 수 있습니다.
LoadBalancer
현재 클라우드에 외부 로드 밸런서를 생성하고(지원되는 경우) 고정 외부 IP 주소를 서비스에 할당합니다.
참고

온프레미스 클러스터의 경우 MetalLB Operator를 배포하여 로드 밸런싱 서비스를 구성할 수 있습니다.

8.3.2. 듀얼 스택 지원

클러스터에 대해 IPv4 및 IPv6 이중 스택 네트워킹을 사용하도록 설정한 경우 Service 개체에 spec.ipFamilyPolicyspec.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(가상 머신)과 연결할 수 있습니다.

사전 요구 사항

  • 서비스를 지원하도록 클러스터 네트워크를 구성했습니다.

프로세스

  1. 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 속성의 레이블과 일치해야 합니다.

  2. VirtualMachine 매니페스트 파일을 저장하여 변경 사항을 적용합니다.
  3. 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
    1
    VirtualMachine 매니페스트의 spec.template.metadata.labels 스탠자에 추가한 라벨을 지정합니다.
    2
    ClusterIP,NodePort 또는 LoadBalancer 를 지정합니다.
    3
    가상 머신에서 노출하려는 네트워크 포트 및 프로토콜 컬렉션을 지정합니다.
  4. 서비스 매니페스트 파일을 저장합니다.
  5. 다음 명령을 실행하여 서비스를 생성합니다.

    $ oc create -f example-service.yaml
  6. VM을 다시 시작하여 변경 사항을 적용합니다.

검증

  • Service 오브젝트를 쿼리하여 사용 가능한지 확인합니다.

    $ oc get service -n example-namespace

8.3.4. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.