티스토리 뷰

Prerequisite

  • Kubernetes 클러스터가 있어야 함 (Kubernetes 클러스터 구성하기 (with. GCP, Ansible, kubeadm) 참고)

  • 관리 Console 서버는 Kubernetes 노드이 속해 있는 네트워크와 같은 네트워크를 사용하는 것을 권장

  • 다른 네트워크를 사용해야만 하는 경우 네트워크 간 Peering 되어 있거나 Site to Site VPN 또는 Proxy 등으로 접근이 가능해야만 함

  • Ndoe 들의 Public IP 말고 Private IP 에 접근 가능해야 함

  • GCP 사용 시 별도의 설정이 없었다면 asia-northeast3 의 default VPC 서브넷(10.178.0.0/20) 을 사용하게 됨

  • gcloud 초기화

    gcloud init
    
  • 환경변수

    PROJECT=$(gcloud config get-value project)
    ACCOUNT=$(gcloud config get-value account)
    ZONE=$(gcloud config get-value compute/zone)
    echo $PROJECT
    echo $ACCOUNT
    echo $ZONE
    

Compute Engine VM Instance

gcloud compute instances create console \
--zone=$ZONE \
--custom-cpu=1 \
--custom-memory=2 \
--image-family=ubuntu-2004-lts \
--image-project=ubuntu-os-cloud  \
--boot-disk-size=50GB

# gcloud compute instances delete console

SSH 접속

  • SSH 접속

    gcloud compute config-ssh --ssh-key-file=~/.ssh/gcp_rsa
    
    ssh console.$ZONE.$PROJECT
    ssh master.$ZONE.$PROJECT
    

GCP Compute Engine 에 SSH Key 등록이 안되어 있다면 Kubernetes 클러스터 구성하기 (with. GCP, Ansible, kubeadm) 글 참고 부탁 드립니다~

[Master 서버] Password 방식으로 SSH 접속 가능하게 설정

sudo su

PASSWD=wooyoung1!
echo "wooyoung:$PASSWD" | chpasswd

PASSWD=root1!
echo "root:$PASSWD" | chpasswd

sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

systemctl restart sshd

[console 서버] Master 서버에 사용자 SSH Key 등록

ssh-keygen -t rsa

ssh-copy-id master
ssh-copy-id root@master

[console 서버] Host 설정

sudo sh -c 'echo "10.178.0.50 master" >> /etc/hosts'
sudo sh -c 'echo "10.178.0.52 worker1" >> /etc/hosts'
sudo sh -c 'echo "10.178.0.51 worker2" >> /etc/hosts'
cat /etc/hosts

Kubernetes Node 들의 Private IP는 gcloud compute instances describe master --format='get(networkInterfaces[0].networkIP)' 로 확인 가능

[console 서버] kubectl Install

# apt 패키지 색인 업데이트, 쿠버네티스 apt 리포지터리 관련 패키지 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 구글 클라우드 공개 사이닝 키 다운로드
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# 쿠버네티스 apt 리포지터리 추가
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 새 리포지터리의 apt 패키지 색인 업데이트
sudo apt-get update
# kubectl 설치
sudo apt-get install -y kubectl

[console 서버] Master 서버의 Kubernetes 인증서 복사

mkdir .kube && cd .kube
scp root@master:/etc/kubernetes/admin.conf ~/.kube/config

kubectl 명령어 실행

  • Node 확인

    kubectl get nodes
    
  • Service Routing

    kubectl run nginx --image=nginx --port=80 && kubectl expose pod nginx
    # busybox pod는 바로 삭제됨
    kubectl run busybox -i --tty --image=busybox --restart=Never --rm
    $> wget nginx.default.svc.cluster.local
    $> cat index.html
    $> exit
    kubectl delete pods nginx
    
  • Pod to Pod ping Test

    kubectl create deployment pingtest --image=busybox --replicas=3 -- sleep infinity
    kubectl get pods --selector=app=pingtest --output=wide
    NAME                        READY   STATUS    RESTARTS   AGE   IP                NODE      NOMINATED NODE   READINESS GATES
    pingtest-59c784bfb4-n25tl   1/1     Running   0          8s    192.168.189.68    worker2   <none>           <none>
    pingtest-59c784bfb4-rvtn5   1/1     Running   0          8s    192.168.235.131   worker1   <none>           <none>
    pingtest-59c784bfb4-s9296   1/1     Running   0          8s    192.168.235.132   worker1   <none>           <none>
    
    kubectl exec -ti pingtest-59c784bfb4-n25tl -- sh
    $> ping 192.168.235.131 -c 4
    $> exit
    kubectl delete deployments.apps pingtest
    

참고자료

리눅스에 kubectl 설치 및 설정
Test networking

댓글