GDC용 VM 런타임에 대한 가상 네트워크 만들기 및 사용

이 문서는 베어메탈용 GKE를 실행하는 애플리케이션 소유자 및 플랫폼 관리자를 대상으로 합니다. 이 문서에서는 GDC용 VM 런타임을 사용하는 VM 워크로드를 지원하기 위한 가상 네트워크를 만들고 사용하는 방법을 설명합니다.

시작하기 전에

이 문서를 완료하려면 다음 리소스에 대해 액세스 권한이 필요합니다.

가상 네트워크 개요

네트워크는 커스텀 리소스를 사용하여 생성됩니다. 클러스터를 만든 후 언제든지 네트워크를 만들 수 있습니다. 호스트 인터페이스 및 VLAN ID 할당(정의된 경우)의 네트워크 설정은 네트워크를 만든 후 변경할 수 없습니다.

네트워크 삭제에는 일부 조건이 적용됩니다. 예를 들어 네트워크 컨트롤러는 VM 또는 네트워크 인터페이스와 같은 리소스에 사용될 때 네트워크 삭제를 거부합니다.

네트워크 정의에는 게이트웨이, 경로, DNS 정보가 포함될 수 있습니다. 외부 DHCP 서버를 사용할 수도 있습니다. 이러한 네트워크 설정은 특정 네트워크 구성 옵션이 정의된 방식에 따라 정적으로 또는 동적으로 할당됩니다.

기본 포드 네트워크

각 클러스터에는 기본적으로 pod-network가 생성됩니다. 이 네트워크는 변경할 수 없습니다. 포드 CIDR과 서비스 CIDR의 경로와 DNS 구성이 자동으로 채워집니다. DNS 구성에는 클러스터와 동일한 값이 사용됩니다.

포드 네트워크에 액세스하는 인터페이스가 필요하지만 특정 구성 옵션이 필요하지 않은 워크로드에서 pod-network를 사용할 수 있습니다. pod-network의 경로는 pod-network 인터페이스에 기본 게이트웨이가 없는 경우에도 워크로드가 항상 클러스터 및 서비스에 액세스할 수 있도록 구성됩니다.

이 기본 pod-network를 사용하면 자체 가상 네트워크를 만드는 추가적인 단계 없이 GDC용 VM 런타임을 테스트할 수 있습니다. 여러 문서에서 예시를 단순화하기 위해 이 기본 pod-network를 사용합니다. VM 워크로드의 요구사항에 따라 이 기본 pod-network만으로 충분할 수도 있고, 자체 가상 네트워크를 만들어 사용해야 할 수도 있습니다.

다음 YAML 매니페스트는 pod-network의 샘플 구성을 보여줍니다. 경로, DNS, 인터페이스 이름 값이 클러스터에서 채워졌습니다.

  ​​apiVersion: networking.gke.io/v1
  kind: Network
  metadata:
    name: pod-network
  spec:
    routes:
    - to: 192.168.0.0/16
    - to: 10.96.0.0/12
    dnsConfig:
      nameservers:
      - 10.96.0.10

가상 네트워크 만들기 및 사용

프로덕션 워크로드를 지원하려면 외부 DHCP 서버 사용, VLAN ID 사용과 같이 필요한 기능을 지원하는 네트워크를 만듭니다. 이러한 네트워크는 VM에 레이어 2(L2) 연결을 제공합니다.

외부 DHCP 서버 사용

GDC용 VM 런타임은 DHCP 서버를 제공하지 않습니다. VM의 IP 주소를 직접 지정하거나 외부 DHCP 서버를 사용하도록 구성해야 합니다. 외부 DHCP 서버를 사용 설정할 때 DHCP가 DNS 및 게이트웨이 설정을 제공하는 경우 해당 구성을 건너뛸 수 있습니다.

외부 DHCP 서버를 사용하는 네트워크를 만들려면 다음 단계를 완료합니다.

  1. 원하는 편집기에서 use-dhcp-network.yaml과 같은 Network 매니페스트를 만듭니다.

    nano use-dhcp-network.yaml
    
  2. 다음 YAML 매니페스트를 복사하여 붙여넣습니다.

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    다음 값을 바꿉니다.

    • NETWORK_NAME: 네트워크 이름입니다.
    • INTERFACE_NAME: 네트워크를 연결할 베어메탈용 GKE 노드의 인터페이스 이름입니다. 사용할 노드의 물리적 인터페이스 이름을 지정합니다. 클러스터의 모든 노드에서 인터페이스 이름이 동일해야 합니다.

    Network 매니페스트에서는 다음 값이 설정됩니다.

    • typeL2로 설정되어 있습니다. 이 설정을 사용하면 워크로드에서 이 네트워크에 대한 레이어 2 연결만 가능합니다. GDC용 VM 런타임에서 만들 수 있는 유일한 네트워크 type입니다.
    • externalDHCP4true로 설정되어 있습니다. 이 설정은 네트워크에 대해 외부 DHCP를 사용 설정합니다. 외부 DHCP 서버는 이 네트워크에 연결된 워크로드의 IPv4 주소 할당, 경로, 게이트웨이, DNS 구성을 담당합니다.
  3. 편집기에서 Network 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 네트워크를 만듭니다.

    kubectl apply -f use-dhcp-network.yaml
    

네트워크 설정 수동 정의

GDC용 VM 런타임은 DHCP 서버를 제공하지 않습니다. VM의 IP 주소를 직접 지정하거나 외부 DHCP 서버를 사용하도록 구성해야 합니다. IP 주소를 수동으로 지정하는 경우 DNS, 경로, 기본 게이트웨이에 대해 네트워크 설정을 정의해야 합니다.

VM의 네트워킹 설정을 수동으로 지정하여 네트워크를 만들려면 다음 단계를 완료하세요.

  1. 원하는 편집기에서 manual-network.yaml과 같은 Network 매니페스트를 만듭니다.

    nano manual-network.yaml
    
  2. 다음 YAML 매니페스트를 복사하여 붙여넣습니다.

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      routes:
      - to: "ROUTE_ADDRESS"
      gateway4: GATEWAY_ADDRESS
      dnsConfig:
        nameservers:
        - NAMESERVER_ADDRESS
    

    다음 값을 바꿉니다.

    • NETWORK_NAME: 네트워크 이름입니다.
    • INTERFACE_NAME: 네트워크를 연결할 베어메탈용 GKE 노드의 인터페이스 이름입니다. 사용할 노드의 물리적 인터페이스 이름을 지정합니다. 클러스터의 모든 노드에서 인터페이스 이름이 동일해야 합니다.
    • ROUTE_ADDRESS: 이 네트워크에 연결되는 모든 VM에서 구성할 선택적 경로(CIDR 표기법)입니다.
    • GATEWAY_ADDRESS: VM에서 사용할 게이트웨이 IP 주소입니다.
    • NAMESERVER_ADDRESS: VM에서 사용할 하나 이상의 DNS 네임서버 IP 주소입니다.
  3. 편집기에서 Network 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 네트워크를 만듭니다.

    kubectl apply -f manual-network.yaml
    

VLAN ID 사용

가상 네트워크를 만들 때 태그가 지정된 VLAN을 정의할 수 있습니다. 이러한 VLAN 할당은 워크로드 요구사항과 격리 요구사항에 따라 네트워크 트래픽을 격리하는 데 도움이 됩니다. AnthosManaged 네트워크에서 클러스터에는 모든 노드에 VLAN 인터페이스를 만들고 삭제할 수 있는 권한이 있습니다.

VLAN 할당을 정의하는 네트워크를 만들려면 다음 단계를 완료합니다.

  1. 원하는 편집기에서 vlan-network.yaml과 같은 Network 매니페스트를 만듭니다.

    nano vlan-network.yaml
    
  2. 다음 YAML 매니페스트를 복사하여 붙여넣습니다.

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      networkLifecycle: AnthosManaged
      l2NetworkConfig:
        vlanID: VLAN_ID
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    다음 값을 바꿉니다.

    • NETWORK_NAME: 네트워크 이름입니다.
    • INTERFACE_NAME: 네트워크를 연결할 베어메탈용 GKE 노드의 인터페이스 이름입니다. 사용할 노드의 물리적 인터페이스 이름을 지정합니다. 클러스터의 모든 노드에서 인터페이스 이름이 동일해야 합니다.
    • VLAN_ID: 트래픽에 태그를 지정할 VLAN ID입니다.

    Network 매니페스트에서는 다음 값이 설정됩니다.

    • 워크로드에서 이 네트워크에 대한 L2 연결만 가능합니다.
    • 네트워크는 AnthosManaged입니다. 이 설정은 지정되지 않은 경우 기본 수명 주기입니다.
      • 이 모드에서 클러스터는 INTERFACE_NAME.VLAN_ID 등의 모든 노드에 VLAN 인터페이스를 만들고 삭제할 권한이 있습니다.
      • 노드에 VLAN 인터페이스를 만들려고 하거나 이미 만든 경우 다음 섹션에 표시된 대로 networkLifecycle 값을 UserManaged로 설정합니다.
    • 네트워크에 외부 DHCP가 사용 설정되어 있습니다. 외부 DHCP 서버는 이 네트워크에 연결된 워크로드의 IPv4 주소 할당, 경로, 게이트웨이, DNS 구성을 담당합니다.
  3. 편집기에서 Network 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 네트워크를 만듭니다.

    kubectl apply -f vlan-network.yaml
    

사용자 관리 네트워크 만들기

다음 예시 가상 네트워크에서는 이전 예시와 달리 네트워크가 Anthos 관리가 아니라 사용자 관리입니다. 사용자 관리 네트워크에서는 사용자가 호스트에 VLAN 인터페이스를 만들거나 삭제해야 합니다.

사용자 관리 모드에서 네트워크를 만들고 VLAN 인터페이스 구성을 수동으로 정의하려면 다음 단계를 수행합니다.

  1. 원하는 편집기에서 user-managed-network.yaml과 같은 Network 매니페스트를 만듭니다.

    nano user-managed-network.yaml
    
  2. 다음 YAML 정의를 복사하여 붙여넣습니다.

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      networkLifecycle: UserManaged
      l2NetworkConfig:
        vlanID: VLAN_ID
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    다음 값을 바꿉니다.

    • NETWORK_NAME: 네트워크 이름입니다.
    • INTERFACE_NAME: 네트워크를 연결할 호스트 인터페이스입니다.
    • VLAN_ID: 트래픽에 태그를 지정할 VLAN ID입니다.

    Network 매니페스트에서는 다음 값이 설정됩니다.

    • 워크로드에서 이 네트워크에 대한 L2 연결만 가능합니다.
    • 네트워크는 UserManaged입니다. 네트워크가 생성되기 전 또는 네트워크가 삭제된 후 모든 노드에서 VLAN VLAN_ID 인터페이스를 만들거나 삭제해야 합니다.
    • 네트워크에 외부 DHCP가 사용 설정되어 있습니다. 외부 DHCP 서버는 이 네트워크에 연결된 워크로드의 IPv4 주소 할당, 경로, 게이트웨이, DNS 구성을 담당합니다.
  3. 편집기에서 Network 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 네트워크를 만듭니다.

    kubectl apply -f user-managed-network.yaml
    

네트워크에 VM 연결

DNS 및 DHCP와 같은 VM의 네트워크 설정은 특정 네트워크 구성 옵션이 정의된 방식에 따라 정적 또는 동적으로 할당됩니다.

  • VM에서 고정 IP 주소를 구성하면 쿼리가 DHCP 서버로 전송되지 않습니다. 게이트웨이 및 경로를 구성하기 위한 추가 정보는 네트워크 리소스에서 가져와야 합니다.
  • VM에 고정 IP 주소를 구성하지 않으면 DHCP 서버로 쿼리가 전송됩니다. VM은 DHCP 서버에서 모든 정보를 가져오고 네트워크 리소스에 정의한 모든 구성을 무시합니다.
  • 네트워크 리소스에서 외부 DHCP가 true로 설정되지 않은 경우 VM의 고정 IP 주소를 구성해야 합니다. 그 외의 모든 정보는 네트워크 리소스에 정의한 구성에서 가져옵니다.

네트워크에 연결되는 VM을 만들려면 다음 단계를 수행합니다.

CLI

  • kubectl을 사용하여 VM을 만들려면 다음 단계를 완료하세요.

    kubectl virt create vm VM_NAME \
      --image ubuntu20.04 \
      --network NETWORK_NAME
    

    다음 값을 바꿉니다.

    • VM_NAME: VM의 이름입니다.
    • NETWORK_NAME: 연결할 네트워크의 이름입니다.
      • 외부 DHCP 서버를 사용할 수 있도록 네트워크가 구성된 경우 VM이 자동으로 IP 주소 할당을 가져옵니다. 고정 IP 주소를 정의해야 하는 경우 --ip IP_ADDRESS 매개변수와 값을 선택적으로 추가하세요.

매니페스트

YAML 매니페스트를 사용하여 VM을 만들려면 다음 단계를 수행합니다.

  1. 원하는 편집기에서 my-vm.yaml과 같은 VirtualMachine 매니페스트를 만듭니다.

    nano my-vm.yaml
    
  2. 다음 YAML 매니페스트를 복사하여 붙여넣습니다.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
          ipAddresses:
            - IP_ADDRESS
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
    

    이 YAML 매니페스트에 다음 설정을 정의합니다.

    • VM_NAME: VM의 이름입니다.
    • NETWORK_NAME: 연결할 네트워크의 이름입니다.
    • IP_ADDRESS: VM에 할당할 IP 주소(192.0.2.10/24와 같이 CIDR 표기법)입니다.
      • 외부 DHCP 서버를 사용할 수 있도록 네트워크가 구성된 경우 VirtualMachine 매니페스트에서 이 필드를 삭제합니다.

    이름이 VM_NAME-boot-dv인 부팅 디스크가 이미 있어야 합니다. 자세한 내용은 VM 부팅 디스크 만들기를 참조하세요.

  3. 편집기에서 VirtualMachine 매니페스트를 저장하고 닫습니다.

  4. kubectl을 사용하여 VM을 만듭니다.

    kubectl apply -f my-vm.yaml
    

다음 단계