검색

7.17. 가상 머신 네트워킹

download PDF

7.17.1. 기본 Pod 네트워크에 대한 가상 머신 구성

masquerade 바인딩 모드를 사용하도록 네트워크 인터페이스를 구성하여 가상 머신을 기본 내부 Pod 네트워크에 연결할 수 있습니다.

참고

KubeMacPool 구성 요소는 지정된 네임스페이스의 가상 머신 NIC에 대한 MAC 주소 풀 서비스를 제공합니다. 이는 기본적으로 활성화되어 있지 않습니다. 해당 네임스페이스에 KubeMacPool 라벨을 적용하여 네임스페이스에서 MAC 주소 풀을 활성화합니다.

7.17.1.1. 명령줄에서 가상 모드 구성

가상 모드를 사용하여 Pod IP 주소를 통해 나가는 가상 머신의 트래픽을 숨길 수 있습니다. 가상 모드에서는 NAT(Network Address Translation)를 사용하여 가상 머신을 Linux 브리지를 통해 Pod 네트워크 백엔드에 연결합니다.

가상 머신 구성 파일을 편집하여 가상 모드를 사용하도록 설정하고 트래픽이 가상 머신에 유입되도록 허용하십시오.

사전 요구 사항

  • 가상 머신은 DHCP를 사용하여 IPv4 주소를 가져오도록 구성해야 합니다. 아래 예제는 DHCP를 사용하도록 구성되어 있습니다.

절차

  1. 가상 머신 구성 파일의 interfaces 스펙을 편집합니다.

    kind: VirtualMachine
    spec:
      domain:
        devices:
          interfaces:
            - name: default
              masquerade: {} 1
              ports:
                - port: 80 2
      networks:
      - name: default
        pod: {}
    1
    가상 모드를 사용하여 연결합니다.
    2
    선택 사항: 포트 필드에 지정된 각 포트를 가상 머신에서 노출하려는 포트 를 나열합니다. 포트 값은 0에서 65536 사이의 숫자여야 합니다. 포트 배열을 사용하지 않으면 유효한 범위의 모든 포트가 들어오는 트래픽에 대해 열려 있습니다. 이 예에서 들어오는 트래픽은 포트 80 에서 허용됩니다.
    참고

    포트 49152 및 49153은 libvirt 플랫폼에서 사용하도록 예약되어 있으며 이러한 포트에 대한 기타 모든 들어오는 트래픽은 삭제됩니다.

  2. 가상 머신을 생성합니다.

    $ oc create -f <vm-name>.yaml

7.17.1.2. 가상 머신에서 서비스 생성

먼저 가상 머신을 노출하는 Service 오브젝트를 생성하여 실행 중인 가상 머신에서 서비스를 생성합니다.

ClusterIP 서비스 유형은 클러스터 내에서 가상 머신을 내부적으로 노출합니다. NodePort 또는 LoadBalancer 서비스 유형은 클러스터 외부에 가상 머신을 노출합니다.

이 절차에서는 가상 머신 지원 서비스로 type: ClusterIPService 오브젝트를 생성, 연결, 노출하는 방법의 예를 제공합니다.

참고

서비스 type이 지정되지 않은 경우 ClusterIP가 기본 서비스 type입니다.

절차

  1. 다음과 같이 가상 머신 YAML을 편집합니다.

    apiVersion: kubevirt.io/v1alpha3
    kind: VirtualMachine
    metadata:
      name: vm-ephemeral
      namespace: example-namespace
    spec:
      running: false
      template:
        metadata:
          labels:
            special: key 1
        spec:
          domain:
            devices:
              disks:
                - name: containerdisk
                  disk:
                    bus: virtio
                - name: cloudinitdisk
                  disk:
                    bus: virtio
              interfaces:
              - masquerade: {}
                name: default
            resources:
              requests:
                memory: 1024M
          networks:
            - name: default
              pod: {}
          volumes:
            - name: containerdisk
              containerDisk:
                image: kubevirt/fedora-cloud-container-disk-demo
            - name: cloudinitdisk
              cloudInitNoCloud:
                userData: |
                  #!/bin/bash
                  echo "fedora" | passwd fedora --stdin
    1
    spec.template.metadata.labels 섹션에 special: key 라벨을 추가합니다.
    참고

    가상 머신의 라벨은 Pod로 전달됩니다. VirtualMachine 구성의 라벨(예: special: key)은 이 절차의 뒷부분에서 생성하는 Service YAML selector 특성의 라벨과 일치해야 합니다.

  2. 가상 머신 YAML을 저장하여 변경 사항을 적용합니다.
  3. Service YAML을 편집하여 Service 오브젝트를 생성하고 노출하는 데 필요한 설정을 구성합니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: vmservice 1
      namespace: example-namespace 2
    spec:
      ports:
      - port: 27017
        protocol: TCP
        targetPort: 22 3
      selector:
        special: key 4
      type: ClusterIP 5
    1
    생성하고 노출하는 서비스의 name을 지정합니다.
    2
    Service YAML의 metadata 섹션에 가상 머신 YAML에서 지정한 namespace에 해당하는 namespace를 지정합니다.
    3
    targetPort: 22를 추가하고 SSH 포트 22에서 서비스를 노출합니다.
    4
    Service YAML의 spec 섹션에서 selector 특성에 special: key를 추가합니다. 이는 가상 머신 YAML 구성 파일에서 추가한 labels에 해당합니다.
    5
    Service YAML의 spec 섹션에서 ClusterIP 서비스에 대해 type: ClusterIP를 추가합니다. NodePortLoadBalancer와 같은 클러스터 외부에서 다른 유형의 서비스를 만들고 노출하려면 type: ClusterIPtype: NodePort 또는 type: LoadBalancer로 적절하게 교체합니다.
  4. Service YAML을 저장하여 서비스 구성을 저장합니다.
  5. ClusterIP 서비스를 생성합니다.

    $ oc create -f <service_name>.yaml
  6. 가상 머신을 시작합니다. 가상 머신이 이미 실행 중인 경우 가상 머신을 재시작하십시오.
  7. Service 오브젝트를 쿼리하여 해당 오브젝트가 사용 가능하고 ClusterIP 유형으로 구성되어 있는지 확인합니다.

    검증

    • oc get service 명령을 실행하여 가상 머신 및 Service YAML 파일에서 참조하는 namespace를 지정합니다.

      $ oc get service -n example-namespace

      출력 예

      NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
      vmservice   ClusterIP   172.30.3.149   <none>        27017/TCP   2m

      • 출력에 표시된 것처럼 vmservice가 실행되고 있습니다.
      • TYPEService YAML에서 지정한 대로 ClusterIP로 표시됩니다.
  8. 서비스를 지원하는 데 사용할 가상 머신에 대한 연결을 활성화합니다. 클러스터 내의 오브젝트(예: 다른 가상 머신)에서 연결합니다.

    1. 다음과 같이 가상 머신 YAML을 편집합니다.

      apiVersion: kubevirt.io/v1alpha3
      kind: VirtualMachine
      metadata:
        name: vm-connect
        namespace: example-namespace
      spec:
        running: false
        template:
          spec:
            domain:
              devices:
                disks:
                  - name: containerdisk
                    disk:
                      bus: virtio
                  - name: cloudinitdisk
                    disk:
                      bus: virtio
                interfaces:
                - masquerade: {}
                  name: default
              resources:
                requests:
                  memory: 1024M
            networks:
              - name: default
                pod: {}
            volumes:
              - name: containerdisk
                containerDisk:
                  image: kubevirt/fedora-cloud-container-disk-demo
              - name: cloudinitdisk
                cloudInitNoCloud:
                  userData: |
                    #!/bin/bash
                    echo "fedora" | passwd fedora --stdin
    2. oc create 명령을 실행하여 두 번째 가상 머신을 만듭니다. 여기서 file.yaml은 가상 머신 YAML의 이름입니다.

      $ oc create -f <file.yaml>
    3. 가상 머신을 시작합니다.
    4. 다음 virtctl 명령을 실행하여 가상 머신에 연결합니다.

      $ virtctl -n example-namespace console <new-vm-name>
      참고

      서비스 유형 LoadBalancer의 경우 vinagre 클라이언트를 사용하여 공용 IP 및 포트를 통해 가상 머신을 연결합니다. 서비스 유형 LoadBalancer를 사용할 때는 외부 포트가 동적으로 할당됩니다.

    5. ssh 명령을 실행하여 연결을 인증합니다. 여기서 172.30.3.149는 서비스의 ClusterIP이고 fedora는 가상 머신의 사용자 이름입니다.

      $ ssh fedora@172.30.3.149 -p 27017

      검증

      • 노출하려는 서비스를 지원하는 가상 머신의 명령 프롬프트가 표시됩니다. 그러면 실행 중인 가상 머신에서 서비스를 지원하는 것입니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.