Skip to Content
Sunbeen's Blog
DocumentsKubernates 기초Kubernates 예시 네트워크

Kubernates 예시 네트워크

🔶 쿠버네티스 네트워크

image.png

버추얼박스를 이용해서 내부 네트워크를 생성하라는 부분이 있습니다.

Vagrant 내용

NodeCnt = 2 Vagrant.configure("2") do |config| config.vm.box = "rockylinux/8" # Disk 확장설정 추가 config.disksize.size = "30GB" config.vbguest.auto_update = false config.vm.synced_folder "./", "/vagrant", disabled: true config.vm.network :forwarded_port, guest: 22, host: 2222, id: "ssh", auto_correct: true config.vm.provision :shell, privileged: true, inline: $install_default config.vm.define "master-node" do |master| master.vm.hostname = "k8s-master" master.vm.network "private_network", ip: "192.168.56.30" master.vm.provider :virtualbox do |vb| vb.memory = 4096 vb.cpus = 4 vb.customize ["modifyvm", :id, "--firmware", "efi"] vb.customize ["modifyvm", :id, "--nested-hw-virt", "on"] end master.vm.provision :shell, privileged: true, inline: $install_master end (1..NodeCnt).each do |i| config.vm.define "worker-node#{i}" do |node| node.vm.hostname = "k8s-worker#{i}" node.vm.network "private_network", ip: "192.168.56.#{i + 30}" node.vm.provider :virtualbox do |vb| vb.memory = 3072 vb.cpus = 3 vb.customize ["modifyvm", :id, "--firmware", "efi"] vb.customize ["modifyvm", :id, "--nested-hw-virt", "on"] end end end end $install_default = <<-SHELL echo '======== [4] Rocky Linux 기본 설정 ========' echo '======== [4-1] 패키지 업데이트 ========' # 강의와 동일한 실습 환경을 유지하기 위해 Linux Update 주석 처리 # yum -y update # 초기 root 비밀번호 변경을 원하시면 아래 주석을 풀고 [새로운비밀번호]에 비번을 입력해주세요 # echo "root:새로운비밀번호" | chpasswd echo '======== [4-2] 타임존 설정 및 동기화========' timedatectl set-timezone Asia/Seoul timedatectl set-ntp true chronyc makestep echo '======== [4-3] Disk 확장 / Bug: soft lockup 설정 추가========' # https://cafe.naver.com/kubeops/25 yum install -y cloud-utils-growpart growpart /dev/sda 4 xfs_growfs /dev/sda4 echo '======== [4-4] [WARNING FileExisting-tc]: tc not found in system path 로그 관련 업데이트 ========' yum install -y yum-utils iproute-tc echo '======= [4-4] hosts 설정 ==========' cat << EOF >> /etc/hosts 192.168.56.30 k8s-master 192.168.56.31 k8s-worker1 192.168.56.32 k8s-worker2 EOF echo '======== [5] kubeadm 설치 전 사전작업 ========' echo '======== [5] 방화벽 해제 ========' systemctl stop firewalld && systemctl disable firewalld echo '======== [5] Swap 비활성화 ========' swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab echo '======== [6] 컨테이너 런타임 설치 ========' echo '======== [6-1] 컨테이너 런타임 설치 전 사전작업 ========' echo '======== [6-1] iptable 세팅 ========' cat <<EOF |tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter cat <<EOF |tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system echo '======== [6-2] 컨테이너 런타임 (containerd 설치) ========' echo '======== [6-2-1] containerd 패키지 설치 (option2) ========' echo '======== [6-2-1-1] docker engine 설치 ========' echo '======== [6-2-1-1] repo 설정 ========' yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo echo '======== [6-2-1-1] containerd 설치 ========' yum install -y containerd.io-1.6.21-3.1.el8 systemctl daemon-reload systemctl enable --now containerd echo '======== [6-3] 컨테이너 런타임 : cri 활성화 ========' # defualt cgroupfs에서 systemd로 변경 (kubernetes default는 systemd) containerd config default > /etc/containerd/config.toml sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml systemctl restart containerd echo '======== [7] kubeadm 설치 ========' echo '======== [7] repo 설정 ========' cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni EOF echo '======== [7] SELinux 설정 ========' setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config echo '======== [7] kubelet, kubeadm, kubectl 패키지 설치 ========' yum install -y kubelet-1.27.2-150500.1.1.x86_64 kubeadm-1.27.2-150500.1.1.x86_64 kubectl-1.27.2-150500.1.1.x86_64 --disableexcludes=kubernetes systemctl enable --now kubelet SHELL $install_master = <<-SHELL echo '======== [8] kubeadm으로 클러스터 생성 ========' echo '======== [8-1] 클러스터 초기화 (Pod Network 세팅) ========' kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address 192.168.56.30 echo '======== [8-2] kubectl 사용 설정 ========' mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config echo '======== [8-3] Pod Network 설치 (calico) ========' kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml echo '======== [8-4] Master에 Pod를 생성 할수 있도록 설정 ========' kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane- echo '======== [9] 쿠버네티스 편의기능 설치 ========' echo '======== [9-1] kubectl 자동완성 기능 ========' echo "source <(kubectl completion bash)" >> ~/.bashrc echo 'alias k=kubectl' >>~/.bashrc echo 'complete -o default -F __start_kubectl k' >>~/.bashrc echo '======== [9-2] Dashboard 설치 ========' kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml echo '======== [9-3] Metrics Server 설치 ========' kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml SHELL
  • Host-only Network

    • 각각의 VM에 이 IP들을 할당
      • 192.168.56.30 (Master)
      • 192.168.56.31 (Worker 1)
      • 192.168.56.32 (Worker 2)
    • VM 간의 통신을 하는 역할
    • 쉘 프로그램을 통해 각 IP로 접속할 수 있도록 도움
  • NAT

    • 각각의 모든 VM들에 똑같은 10.0.2.15 IP를 할당
    • 외부 인터넷과 연결을 수행
    • 외부 인터넷을 통해 동일한 필요 설치 파일들을 다운로드
  • 서비스 네트워크 : IP 10.96.0.0/12

    • 서비스를 만들 경우 해당 서비스의 IP는 10번대로 시작하는 IP가 할당
  • 파드 네트워크 : 20.96.0.0/12

    • 파드를 만들면 파드 IP에는 20번대로 시작되는 IP가 할당
k8s-Master 토큰 발급 Kubernetes 클러스터에 새로운 노드를 조인(join)시키기 위한 명령어를 생성해주는 명령어 kubeadm token create --print-join-command 실제 worker/control-plane 노드에서 실행할 완성된 join 커맨드 -> kubeadm join 192.168.56.30:6443 --token td76kr.krihn7977yfsgn07 --discovery-token-ca-cert-hash sha256:f9416888e7712992e73d71943bc8bf738ea0e9422d596ebdbd556b21009a39fd k8s-worker 토큰 적용 master(API server)에 접속 - kubeadm join 192.168.56.30:6443 - 기본 포트는 6443 bootstrap token --token 형식: xxxxxx.xxxxxxxxxxxxxxxx 기본적으로 24시간 유효 --discovery-token-ca-cert-hash 클러스터의 CA 인증서 해시 MITM 공격 방지용 노드가 "이게 진짜 master 맞냐?" 검증하는 역할 [root@k8s-worker1 ~]# kubeadm join 192.168.56.30:6443 --token td76kr.krihn7977yfsgn07 --discovery-token-ca-cert-hash sha256:f9416888e7712992e73d71943bc8bf738ea0e9422d596ebdbd556b21009a39fd [preflight] Running pre-flight checks [preflight] Reading configuration from the cluster... [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml' [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Starting the kubelet [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap... This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
Note

본 문서는 인프런의 초급자를 위한 【대세는 쿠버네티스】 강의를 바탕으로 학습한 내용을 정리한 것입니다.

Last updated on