이 문서는 베어메탈용 GKE를 실행하는 애플리케이션 소유자를 대상으로 합니다. 이 문서에서는 Google Distributed Cloud용 VM 런타임을 사용하는 가상 머신(VM)에 연결하는 방법을 보여줍니다. IP 주소를 직접 사용하거나 SSH 또는 Console 액세스를 위한 기본 제공 도구를 사용해서 VM에 연결할 수 있습니다.
시작하기 전에
이 문서를 완료하려면 다음 리소스에 대해 액세스 권한이 필요합니다.
- 클러스터 중 하나에서 실행되는 VM. 필요한 경우 베어메탈용 GKE에 VM을 만듭니다.
kubectl
의 플러그인으로 설치되는virtctl
클라이언트 도구. 필요한 경우 virtctl 클라이언트 도구를 설치합니다.
VM에 비밀번호 없는 SSH 액세스 구성
Google Distributed Cloud용 VM 런타임에서 설치하는 게스트 에이전트를 통해 VM에 직접 비밀번호 없는 SSH 액세스가 가능합니다. 특히 게스트 에이전트는 SSH 키를 설치하고 만료합니다. 이 기능을 사용하면 클러스터 네트워크 외부의 클라이언트에서 VM에 액세스할 수 있는 SSH 터널이 사용 설정됩니다.
게스트 에이전트 사용 설정
게스트 에이전트를 사용 설정하려면 다음 안내를 따르세요.
VirtualMachine
커스텀 리소스를 확인하여 게스트 에이전트를 사용 설정하도록 구성되었는지 확인합니다.kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
spec.osType
필드는 VM의 운영체제(Linux
또는Windows
)로 설정되어야 합니다.spec.guestEnvironment
섹션은 명시적으로 비워두면 안 됩니다. 섹션이 빈 상태로 구성된 경우(guestEnvironment: {}
), 완전히 삭제하여 게스트 에이전트를 사용 설정할 수 있습니다.액세스하려는 VM의
VirtualMachine
커스텀 리소스는 다음과 같습니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: sample-vm spec: compute: cpu: vcpus: 2 memory: capacity: 4Gi ... osType: Linux ...
필요한 경우
kubectl edit
을 사용하여VirtualMachine
커스텀 리소스를 업데이트합니다.게스트 에이전트가 작동하는지 확인하려면 VM 커스텀 리소스의
status
를 확인합니다.kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
게스트 에이전트가 작동하면
GuestEnvironmentEnabled
및GuestEnvironmentDataSynced
조건에 대한status: "True"
가 표시됩니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: ... name: vm-sample-01 ... status: conditions: - lastTransitionTime: "2022-10-05T22:40:26Z" message: "" observedGeneration: 1 reason: UserConfiguration status: "True" type: GuestEnvironmentEnabled - lastTransitionTime: "2022-10-06T21:55:57Z" message: "" observedGeneration: 1 reason: GuestEnvironmentDataSynced status: "True" type: GuestEnvironmentSynced ...
비밀번호 없는 SSH 액세스 사용 설정
VM에 비밀번호 없는 SSH 액세스를 사용 설정하려면 다음 안내를 따르세요.
원하는 편집기에서
vm-access-request.yaml
과 같은VirtualMachineAccessRequest
매니페스트 파일을 만듭니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: name: VMAR_NAME namespace: VM_NAMESPACE spec: vm: VM_NAME user: USERNAME ssh: key: PUBLIC_SSH_KEY ttl: EXPIRATION_TIME
다음을 바꿉니다.
VMAR_NAME
: 액세스 요청 리소스의 이름입니다.VM_NAMESPACE
: 액세스하려는 VM의 네임스페이스입니다.VM_NAME
: 액세스하려는 VM의 이름입니다.USERNAME
: VM에 액세스하는 사용자의 사용자 이름입니다.PUBLIC_SSH_KEY
: SSH 액세스를 위한 공개 키입니다. 일반적으로id_rsa.pub
파일의 콘텐츠입니다.EXPIRATION_TIME
:ttl
(수명) 필드는 SSH 키가 유효한 기간을 지정합니다.예를 들어
30m
을 지정하면 SSH 키가 30분 후 만료됩니다.이 플래그에는 다음 단위가 사용됩니다.
s
, 초m
, 분h
, 시간d
, 일
kubectl apply
를 사용하여 매니페스트 파일에서VirtualMachineAccessRequest
을 만듭니다. 예를 들어 매니페스트 파일의 이름을vm-access-request.yaml
로 지정한 경우kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
다음을 바꿉니다.
MANIFEST
: 액세스 요청 매니페스트 파일의 이름입니다. 예를 들면vm-access-request.yaml
입니다.KUBECONFIG
: 액세스 중인 VM을 호스팅하는 클러스터의 kubeconfig 파일 경로입니다.
액세스 요청 구성이 성공했는지 확인하려면
VirtualMachineAccessRequest
의 상태를 확인합니다.kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
구성이 성공하면
status
섹션에state: configured
가 포함됩니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: ... annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"vm.cluster.gke.io/v1","kind":"VirtualMachineAccessRequest", "metadata":{"annotations":{},"name":"vmar-sample","namespace":"default"}, "spec":{"ssh":{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host","ttl":"5h"},"user":"sample-user","vm":"vm-sample-01"}} creationTimestamp: "2022-10-06T21:55:57Z" finalizers: - vm.cluster.gke.io/vmar-finalizer generation: 2 name: vmar-sample namespace: default resourceVersion: "13033921" uid: 282d72ad-f48d-4e89-af22-336940ac9f58 spec: ssh: key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host ttl: 5m0s user: sample-user vm: vm-sample-01 status: processedAt: "2022-10-06T21:55:57Z" state: configured
게스트 에이전트 사용 중지
새 VM을 만들고 osType
필드를 설정하면 게스트 에이전트가 사용 설정됩니다.
이 기능이 미리보기 상태인 동안에는 VirtualMachine
커스텀 리소스를 수정하여 이 기능을 사용 중지할 수 있습니다. 게스트 에이전트를 사용 중지하면 VM에 대한 비밀번호 없는 SSH 액세스가 사용 중지됩니다.
게스트 에이전트를 중지하려면 다음을 실행합니다.
구성을 변경하기 전에
kubectl
를 사용하여 VM을 중지합니다.kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
VM 리소스를 수정합니다.
kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
VirtualMachine
구성을 업데이트하여 빈spec.guestEnvironment
를 명시적으로 추가합니다.apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachine metadata: name: vm-example namespace: default spec: compute: ... osType: Linux guestEnvironment: {}
편집기에서 업데이트된 VM 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM을 시작합니다.kubectl virt start VM_NAME --kubeconfig KUBECONFIG
IP 주소를 사용하여 연결
VM에 액세스 가능한 IP 주소가 있고 VM에 액세스하기 위한 사용자 인증 정보가 이미 있으면 해당 SSH, VNC, RDP와 같은 프로토콜을 사용하여 연결할 수 있습니다.
IP 주소를 통해 연결
VM의 IP 주소에 직접 연결할 수 있으면 다음 방법 중 하나를 사용합니다.
SSH
VM 세부정보를 가져와서 IP 주소를 확인합니다.
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
다음 값을 바꿉니다.
VM_NAME
: VM의 이름입니다.VM_NAMESPACE
: VM의 네임스페이스입니다.
다음 예시 출력은 VM 정보 및 IP 주소를 보여줍니다.
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
SSH 클라이언트를 사용하여 VM에 연결합니다.
ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
다음 값을 바꿉니다.
USERNAME
: VM 계정의 사용자 이름입니다.IP_ADDRESS
: 이전 단계에서 가져온 VM의 IP 주소입니다.PATH_TO_KEY
: 비공개 SSH 키의 경로입니다.
VNC 또는 RDP
가상 네트워크 컴퓨팅(VNC) 및 원격 데스크톱 프로토콜(RDP)에서는 그래픽 콘솔을 사용하여 VM에 액세스할 수 있습니다. IP 주소를 사용할 때는 VM에 연결하는 데 사용하기 전 게스트 OS에서 VNC 또는 RDP를 사용 설정해야 합니다. VNC 또는 RDP 사용 설정 및 사용에 대한 자세한 내용은 게스트 OS 문서를 참조하세요.
또한 VM을 만들 때 초기 사용자 인증 정보를 만들기 위해 정의하는 것과 같이 VM에 로그인하기 위해 기존 사용자 인증 정보가 필요합니다.
VM 세부정보를 가져와서 IP 주소를 확인합니다.
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
다음 값을 바꿉니다.
VM_NAME
: VM의 이름입니다.VM_NAMESPACE
: VM의 네임스페이스입니다.
다음 예시 출력은 VM 정보 및 IP 주소를 보여줍니다.
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
클라이언트 도구와 VNC 포트
5900
또는 RDP 포트3389
와 같은 적합한 포트를 사용해서 이전 단계에서 가져온 VM의 IP 주소에 연결합니다.
서비스를 통해 연결
VM이 기본 pod-network
에 연결되고 VM의 IP 주소와 직접 통신할 수 없으면 부하 분산기 Service
뒤에 VM을 노출합니다.
원하는 편집기에서
my-service-load-balancer.yaml
과 같은Service
매니페스트를 만듭니다.nano my-service-load-balancer.yaml
다음 YAML 매니페스트를 복사하여 붙여넣습니다.
apiVersion: v1 kind: Service metadata: name: VM_NAME-service spec: selector: kubevirt/vm: VM_NAME ports: - name: PORT_NAME protocol: PROTOCOL_TYPE port: EXTERNAL_PORT targetPort: TARGET_PORT type: LoadBalancer
이
Service
매니페스트 유형에서 다음 값을 바꿉니다.VM_NAME
: 원격 액세스에 노출할 VM의 이름입니다.PORT_NAME
:ssh
,vnc
,rdp
와 같은 프로토콜의 이름입니다.PROTOCOL_TYPE
: SSH 및 RDP의tcp
, VNC의udp
와 같은 프로토콜 유형입니다.EXTERNAL_PORT
: 노출 및 연결에 사용할 외부 포트 번호입니다.TARGET_PORT
: SSH의22
와 같은 대상 포트입니다.
편집기에서
Service
매니페스트를 저장하고 닫습니다.kubectl
을 사용하여Service
를 만듭니다.kubectl apply -f my-service-load-balancer.yaml --kubeconfig KUBECONFIG
부하 분산기 서비스의
EXTERNAL-IP
주소를 가져옵니다.kubectl get service VM_NAME-service --kubeconfig KUBECONFIG
다음 예시 출력에 표시된 것처럼 부하 분산기의 IP 주소가 표시됩니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vm1-service LoadBalancer 172.26.232.167 10.200.0.51 22:31141/TCP 6d20h
SSH 클라이언트 사용과 같이 표준 프로토콜을 사용해서 부하 분산기의
EXTERNAL-IP
주소에 연결합니다.ssh USERNAME@LOAD_BALANCER_IP_ADDRESS -i PATH_TO_KEY
다음 값을 바꿉니다.
USERNAME
: VM 계정의 사용자 이름입니다.LOAD_BALANCER_IP_ADDRESS
: 부하 분산기의 IP 주소입니다.PATH_TO_KEY
: 비공개 SSH 키의 경로입니다.
SSH를 통해 직접 연결
클라이언트가 베어메탈용 Anthos 클러스터 노드와 동일한 물리적 네트워크에 연결되어 있고 클러스터에 연결하기 위해 SSH 터널을 사용할 필요가 없으면 kubectl virt ssh
를 사용하여 연결할 수 있습니다.
SSH를 사용하여
virtctl
부가기능으로 Console에서 Linux VM에 연결하려면 다음 안내를 따르세요.kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
다음 값을 바꿉니다.
USERNAME
: VM에 액세스하기 위한 사용자 이름입니다. 이 계정이 VM에 없으면 생성됩니다.VM_NAME
: VM의 이름입니다.
SSH를 사용해서 VM에 성공적으로 연결되었고 더 이상 연결이 필요하지 않으면 SSH 세션을 종료합니다.
exit
Console을 직접 사용하여 연결
SSH 액세스를 위해 Linux VM에 대한 직접 네트워크 연결이 없으면 Google Distributed Cloud용 VM 런타임 콘솔을 사용해서 VM의 콘솔에 연결합니다. 이 방법은 직렬 콘솔을 엽니다. 연결 후에는 그래픽 콘솔 대신 명령 프롬프트가 표시됩니다.
Console에서 Linux VM에 액세스하려면
virtctl
부가기능을 사용합니다.kubectl virt console VM_NAME --kubeconfig KUBECONFIG
VM_NAME
을 VM 이름으로 바꿉니다.메시지가 표시되면 VM에 대한 사용자 인증 정보를 입력합니다. 이러한 사용자 인증 정보는 VM에 존재하거나 VM이 생성될 때 적용되어야 합니다. 필요에 따라 VM을 만들 때 초기 사용자 인증 정보를 만드는 방법은 다음 섹션을 참조하세요.
VM의 Console에 성공적으로 연결되었고 연결이 더 이상 필요하지 않으면 VM 세션과 Console을 종료합니다.
Ctrl + ]
VNC를 직접 사용하여 연결
kubectl virt vnc
명령어를 사용하여 가상 네트워크 컴퓨팅(VNC) 그래픽 콘솔을 열어 VM에 액세스할 수 있습니다. 이 방법은 Windows 또는 Linux 게스트 OS를 실행하는 VM에 적합합니다. kubectl virt vnc
명령어를 사용하면 Google Distributed Cloud용 VM 런타임이 VNC를 열기 때문에 게스트 OS에서 VNC를 사용 설정할 필요가 없습니다.
VM을 만들 때 초기 사용자 인증 정보를 만들기 위해 정의하는 것과 같이 VM에 로그인하기 위해 기존 사용자 인증 정보가 필요합니다.
VNC를 사용하여 VM에 액세스하려면
virtctl
부가기능을 사용합니다.kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
VM_NAME
을 VM 이름으로 바꿉니다.메시지가 표시되면 VM에 대한 사용자 인증 정보를 입력합니다.
VM의 VNC 세션에 성공적으로 연결되었고 연결이 더 이상 필요하지 않으면 VM에서 로그오프하고 VNC 연결을 종료합니다.
초기 사용자 인증 정보 만들기
Console을 사용하여 VM에 연결할 때는 사용자 인증 정보를 지정해야 합니다. 초기 사용자 인증 정보를 만드는 프로세스는 Linux 및 Windows 게스트 운영체제에 따라 다릅니다.
Linux 게스트 OS
Linux VM의 경우 커스텀 이미지에 사용자 인증 정보를 내장하거나 VM을 만들 때 지정할 수 있습니다.
kubectl virt create
명령어에--configure-initial-password
매개변수를 사용합니다.kubectl virt create vm VM_NAME \ --image ubuntu20.04 \ --os-type Linux \ --configure-initial-password USERNAME:PASSWORD \ --kubeconfig KUBECONFIG
다음 값을 바꿉니다.
VM_NAME
: VM의 이름입니다.USERNAME
: VM에서 만들려는 계정의 사용자 이름입니다.PASSWORD
: 사용자 계정의 비밀번호입니다.
이 예시 명령어는 Ubuntu 20.04를 실행하는 Linux VM을 만듭니다. VM에 처음 로그인한 후 초기 사용자 인증 정보를 변경하는 것이 좋습니다.
Windows 게스트 OS
다음 단계를 따라 기존 사용자의 비밀번호를 재설정하거나 새 사용자의 초기 비밀번호를 만듭니다.
Windows VM에서 게스트 에이전트를 사용 설정합니다.
VM을 구성하여 게스트 에이전트를 사용 설정합니다.
VNC 또는 RDP를 사용하여 VM에 연결합니다.
VM에서
guest agent
드라이브로 이동합니다. 대부분의 경우E:
드라이브입니다.PowerShell을 사용하여
install.ps1
을 실행합니다.이렇게 하면 게스트 에이전트가 설치되고 시작됩니다. 이후 VM 재부팅 시 게스트 에이전트가 자동으로 시작됩니다.
원격 세션을 닫습니다.
관리자 워크스테이션에서 다음 명령어를 사용하여 Windows VM 비밀번호를 재설정하거나 새 사용자 이름을 사용하는 경우 설정합니다.
kubectl virt reset-windows-password VM_NAME \ --user=USERNAME \ --namespace=VM_NAMESPACE
다음을 바꿉니다.
VM_NAME
: VM의 이름USERNAME
: 비밀번호를 재설정(또는 설정)할 사용자 이름입니다. 새 사용자 이름의 경우 명령어는 새 Windows 계정을 만들고 초기 비밀번호를 설정합니다.VM_NAMESPACE
: (선택사항) VM의 네임스페이스입니다. 이 플래그는 선택사항입니다. 지정하지 않으면 기본 네임스페이스default
가 사용됩니다.
확인 메시지 없이 비밀번호를 재설정(또는 설정)하려면 선택사항인
--force
플래그를 사용합니다.--force
플래그를 사용하면 기존 계정의 비밀번호를 재설정하여 나타나는 결과에 대한 경고가 표시됩니다.--force
플래그가 없으면 명령어는 다음 텍스트로 비밀번호 재설정을 확인하라는 메시지를 표시합니다.This command creates an account and sets an initial password for the user USERNAME if the account does not already exist. If the account already exists, resetting the password can cause the LOSS OF ENCRYPTED DATA secured with the current password, including files and stored passwords. Would you like to set or reset the password for USERNAME (Y/n)?
비밀번호 재설정을 확인하거나 강제한 후 이 명령어는 지정된 VM 및 사용자 이름의 새 비밀번호를 반환합니다.
Resetting and retrieving password for USERNAME on VM_NAME vm_name: VM_NAME username: USERNAME password: PASSWORD