2023. 10. 25. 11:25ㆍk8s
ubuntu 20.04
master node 1개 : 메모리 4G :cpu 2/1, nat 100G (single)
work node 2개 : 메모리 4G :cpu 2/1, nat 100G (single)
user01/test1234
master 192.168.2.10 [8.8.8.8/192.168.2.2]
work1 192.168.2.11 [8.8.8.8/192.168.2.2]
work2 192.168.2.12 [8.8.8.8/192.168.2.2]
apt update
apt install -y net-tools
apt install -y curl
dpkg -l | grep ssh
hostnamectl set-hostname [master | work1 | work2]
nano /etc/hosts
192.168.2.10 master
192.168.2.11 work1
192.168.2.12 work2
win10
win10에서 winSCP, superputty 설치
win10에서 ssh 접속 확인 superputty
swap 공간 비활성화
모든 노드에서 아래와 같이 명령어 실시
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
컨테이너 런타임 구성
모든 노드에 다음 명령으로 구성을 수행한다.
# Using Docker Repository
apt update
apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
# containerd 설치
sudo apt update
sudo apt -y install containerd.io
systemctl status containerd
# Containerd configuration for Kubernetes
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
EOF
sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
systemctl restart containerd
ls /var/run/containerd/containerd.sock
containerd 설치 참고 사이트
https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/install-containerd-on-ubuntu-22-04.html
How to Install Containerd on Ubuntu 22.04 / Ubuntu 20.04 | ITzGeek
containerd is an industry-standard container runtime that manages the complete container lifecycle of its host system. It handles image
www.itzgeek.com
kubeadm, kubelet 및 kubectl 설치
모든 머신에 다음 패키지들을 설치한다.
- kubeadm : 클러스터를 부트스트랩하는 명령이다. 클러스터를 초기화하고 관리하는 기능을 갖는다.
- kubelet : 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트다. 데몬으로 동작하며 컨테이너를 관리한다.
- kubectl : 클러스터와 통신하기 위한 커맨드 라인 유틸리티이다. 클라이언트 전용 프로그램이다.
모든 노드에서 다음 명령을 실행한다.
apt-get update
apt-get install -y apt-transport-https ca-certificates curl
sudo mkdir -p /etc/apt/keyrings
echo "deb [signed-by=/etc/apt/keyrings/kubernetes.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
버전 확인하기
kubeadm version
kubectl version
kubelet --version
kubeadm, kubelet 및 kubectl 설치 참고 사이트
Ubuntu kubernetes-xenial public key is not available: NO_PUBKEY B53DC80D13EDEF05 · Issue #2862 · kubernetes/release
What happened: $ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - % Total % Received % Xferd Average Speed Time Time Ti...
github.com
넷필터 브릿지 설정
모든 노드에 다음 명령으로 넷필터 브릿지 설정
modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
마스터 노드 초기화
kubeadm init
'kubeadm token create --print-join-command'을 통해 token 재생성 가능
아래 명령어를 통해 해시값 확인도 가능하다.
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
유저 설정
다음 명령을 실행하면 .kube/config 파일이 설정되면서 사용이 가능해진다. 이 실습은 master 노드에서만 진행한다.
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
work 노드 조인하기
본인의 콘솔에 출력된 토큰과 hash 값을 사용해 조인을 수행해야 한다. 다음 명령은 work 노드에서 실습을 진행한다.
kubeadm join <master node ip:6443> --token <Token 값> --discovery-token-ca-cert-hash sha256:<Hash 값>
kubeadm join 192.168.2.10:6443 --token vnnmtv.h7ufyc4qg1hx1myl --discovery-token-ca-cert-hash sha256:d0a27403d9b6bbff25d242bfd8a1477a6f920ad775c5b7d796bb6869ecf9d52b
pod 네트워크 배포
master 노드에서 다음 명령을 실행하면 앞서 구성한 유저 설정을 통해 클러스터에 cilium을 설치한다.
curl -LO https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
cilium install
'cilium status --wait'을 통해 완료 시 바로 확인 가능
pod 네트워크 배포 참고 사이트
https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/
Use Cilium for NetworkPolicy
This page shows how to use Cilium for NetworkPolicy. For background on Cilium, read the Introduction to Cilium. Before you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. I
kubernetes.io
Cilium
Cilium은 대규모 컨테이너화된 환경에서 네트워크 보안 및 연결을 제공하는 오픈 소스 프로젝트 및 솔루션이다. Cilium은 기존의 L3/L4 네트워크 시스템보다 더 높은 수준의 보안 및 성능을 제공하며, 이를 위해 eBPF (Extended Berkeley Packet Filter)라고 하는 리눅스 커널 기반 기술을 사용한다.
Cilium은 클라우드 네이티브 환경과 마이크로서비스 아키텍처에서 네트워크 보안과 성능을 향상시키는 데 사용되며, Kubernetes와 통합되어 클러스터의 네트워크 관리를 간단하게 만든다.
Cilium의 주요 특징과 역할
- eBPF 기반 네트워크 보안 : Cilium은 컨테이너 및 마이크로서비스 간의 통신을 감시하고 보호하는 데 eBPF를 사용한다. eBPF는 커널 내에서 실행되는 프로그램을 사용하여 네트워크 패킷을 필터링하고 분석할 수 있는 강력한 도구다.
- Layer 7 (애플리케이션 레이어) 보안 : Cilium은 Layer 7 (HTTP, gRPC, Kafka 등)에서의 보안을 제공하며, 애플리케이션 레벨에서의 접근 제어와 정책 적용을 가능하게 한다.
- Kubernetes와의 통합 : Cilium은 Kubernetes와 긴밀하게 통합되어 Kubernetes 환경에서 네트워크 보안을 제공하고, Kubernetes 서비스 디스커버리 및 로드 밸런싱을 강화한다.
- Distributed Firewall : Cilium은 분산 방화벽을 제공하여 애플리케이션 및 서비스 간의 통신을 정교하게 제어한다. 보안 정책을 정의하여 허용되는 통신만 가능하게 한다.
- BPF로 데이터 수집 및 분석 : eBPF를 활용하여 네트워크 트래픽을 모니터링하고 이를 분석할 수 있다. 이것은 네트워크 문제 해결 및 보안 사고 탐지에 도움이 된다.
트러블 슈팅
노드 조인 시 10250 port가 사용 중이기 때문에 조인이 안 된다는 메시지를 얻을 때가 있다.
이때 'netstat -tupln | grep 10250'을 통해 10250 포트를 사용 중인 프로세스의 PID를 확인한다.
'kill -9 <PID>'을 통해 프로세스를 중지시키고 다시 조인을 시도해서 문제를 해결했다.
그 밖의 join 실패 시 master node에서 다음과 같은 조치가 가능
1. apt -y remove kubeadm
apt -y install kubeadm
넷필터 재설치
2. rm /etc/containerd/config.toml
systemctl restart containerd
kubeadm init
3. rm -r $HOME/.kube
kubeadm init
mkdir -p $HOME/.kube
'k8s' 카테고리의 다른 글
배포명세서 실습 (0) | 2023.10.26 |
---|---|
클러스터에 tomcat 배포 (0) | 2023.10.26 |
probe (0) | 2023.10.25 |
docker와 kubernetes의 차이점 (0) | 2023.10.24 |
Ingress (0) | 2023.10.24 |