이 문서는 베어메탈용 GKE를 실행하는 애플리케이션 소유자 및 플랫폼 관리자를 대상으로 합니다. 이 문서에서는 GDC용 VM 런타임을 사용하는 VM 워크로드를 지원하기 위한 가상 네트워크를 만들고 사용하는 방법을 설명합니다.
시작하기 전에
이 문서를 완료하려면 다음 리소스에 대해 액세스 권한이 필요합니다.
- 베어메탈용 GKE 버전 1.12.0(
anthosBareMetalVersion: 1.12.0
) 이상 클러스터에 대한 액세스 권한. 워크로드 실행이 가능한 모든 클러스터 유형을 사용할 수 있습니다. 필요한 경우 Compute Engine에서 베어메탈용 GDCV를 사용해 보거나 클러스터 만들기 개요를 참조하세요. kubectl
의 플러그인으로 설치되는virtctl
클라이언트 도구. 필요한 경우 virtctl 클라이언트 도구를 설치합니다.
가상 네트워크 개요
네트워크는 커스텀 리소스를 사용하여 생성됩니다. 클러스터를 만든 후 언제든지 네트워크를 만들 수 있습니다. 호스트 인터페이스 및 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 서버를 사용하는 네트워크를 만들려면 다음 단계를 완료합니다.
원하는 편집기에서
use-dhcp-network.yaml
과 같은Network
매니페스트를 만듭니다.nano use-dhcp-network.yaml
다음 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
매니페스트에서는 다음 값이 설정됩니다.type
가L2
로 설정되어 있습니다. 이 설정을 사용하면 워크로드에서 이 네트워크에 대한 레이어 2 연결만 가능합니다. GDC용 VM 런타임에서 만들 수 있는 유일한 네트워크type
입니다.externalDHCP4
가true
로 설정되어 있습니다. 이 설정은 네트워크에 대해 외부 DHCP를 사용 설정합니다. 외부 DHCP 서버는 이 네트워크에 연결된 워크로드의 IPv4 주소 할당, 경로, 게이트웨이, DNS 구성을 담당합니다.
편집기에서
Network
매니페스트를 저장하고 닫습니다.kubectl
을 사용하여 네트워크를 만듭니다.kubectl apply -f use-dhcp-network.yaml
네트워크 설정 수동 정의
GDC용 VM 런타임은 DHCP 서버를 제공하지 않습니다. VM의 IP 주소를 직접 지정하거나 외부 DHCP 서버를 사용하도록 구성해야 합니다. IP 주소를 수동으로 지정하는 경우 DNS, 경로, 기본 게이트웨이에 대해 네트워크 설정을 정의해야 합니다.
VM의 네트워킹 설정을 수동으로 지정하여 네트워크를 만들려면 다음 단계를 완료하세요.
원하는 편집기에서
manual-network.yaml
과 같은Network
매니페스트를 만듭니다.nano manual-network.yaml
다음 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 주소입니다.
편집기에서
Network
매니페스트를 저장하고 닫습니다.kubectl
을 사용하여 네트워크를 만듭니다.kubectl apply -f manual-network.yaml
VLAN ID 사용
가상 네트워크를 만들 때 태그가 지정된 VLAN을 정의할 수 있습니다. 이러한 VLAN 할당은 워크로드 요구사항과 격리 요구사항에 따라 네트워크 트래픽을 격리하는 데 도움이 됩니다. AnthosManaged
네트워크에서 클러스터에는 모든 노드에 VLAN 인터페이스를 만들고 삭제할 수 있는 권한이 있습니다.
VLAN 할당을 정의하는 네트워크를 만들려면 다음 단계를 완료합니다.
원하는 편집기에서
vlan-network.yaml
과 같은Network
매니페스트를 만듭니다.nano vlan-network.yaml
다음 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 구성을 담당합니다.
편집기에서
Network
매니페스트를 저장하고 닫습니다.kubectl
을 사용하여 네트워크를 만듭니다.kubectl apply -f vlan-network.yaml
사용자 관리 네트워크 만들기
다음 예시 가상 네트워크에서는 이전 예시와 달리 네트워크가 Anthos 관리가 아니라 사용자 관리입니다. 사용자 관리 네트워크에서는 사용자가 호스트에 VLAN 인터페이스를 만들거나 삭제해야 합니다.
사용자 관리 모드에서 네트워크를 만들고 VLAN 인터페이스 구성을 수동으로 정의하려면 다음 단계를 수행합니다.
원하는 편집기에서
user-managed-network.yaml
과 같은Network
매니페스트를 만듭니다.nano user-managed-network.yaml
다음 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
입니다. 네트워크가 생성되기 전 또는 네트워크가 삭제된 후 모든 노드에서 VLANVLAN_ID
인터페이스를 만들거나 삭제해야 합니다. - 네트워크에 외부 DHCP가 사용 설정되어 있습니다. 외부 DHCP 서버는 이 네트워크에 연결된 워크로드의 IPv4 주소 할당, 경로, 게이트웨이, DNS 구성을 담당합니다.
편집기에서
Network
매니페스트를 저장하고 닫습니다.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
매개변수와 값을 선택적으로 추가하세요.
- 외부 DHCP 서버를 사용할 수 있도록 네트워크가 구성된 경우 VM이 자동으로 IP 주소 할당을 가져옵니다. 고정 IP 주소를 정의해야 하는 경우
매니페스트
YAML 매니페스트를 사용하여 VM을 만들려면 다음 단계를 수행합니다.
원하는 편집기에서
my-vm.yaml
과 같은VirtualMachine
매니페스트를 만듭니다.nano my-vm.yaml
다음 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
매니페스트에서 이 필드를 삭제합니다.
- 외부 DHCP 서버를 사용할 수 있도록 네트워크가 구성된 경우
이름이
VM_NAME-boot-dv
인 부팅 디스크가 이미 있어야 합니다. 자세한 내용은 VM 부팅 디스크 만들기를 참조하세요.편집기에서
VirtualMachine
매니페스트를 저장하고 닫습니다.kubectl
을 사용하여 VM을 만듭니다.kubectl apply -f my-vm.yaml