ip link
또는 ifconfig -a
명령을 사용하여 네트워크 인터페이스의 MAC 주소를 확인sudo cat /sys/class/dmi/id/product_uuid
명령을 사용하여 확인$ cat <<EOF >> /etc/hosts
192.168.1.159 master1
192.168.2.238 worker1
192.168.2.249 worker2
EOF
$ hostnamectl set-hostname HOST_NAME(ex. master / worker1 ...)
$ systemctl disable --now firewalld
# SELinux 비활성화
# 컨테이너가 호스트 파일시스템(예를 들어, 파드 네트워크에 필요한)에 접근하도록 허용하는 데 필요하다. kubelet에서 SELinux 지원이 개선될 때까지 이 작업을 수행해야 한다.
$ setenforce 0
$ sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
# 스왑 메모리 제거
$ swapoff -a
$ sed -i '/ swap / s/^/#/' /etc/fstab
# IPv4 포워딩 및 iptables에서 브리지된 트래픽 확인
# https://kubernetes.io/docs/setup/production-environment/container-runtimes/
$ cat <<EOF > /etc/sysctl.d/k8s.conf # kubernetes
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
$ sysctl --system
# 1로 설정되었는지 확인
$ sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
$ reboot
$ sudo yum -y install git wget curl
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$ systemctl enable --now docker
# 운영체제 아키텍처 확인
$ uname -a # CentOS7 => el7.x86_64
# 원하는 버전 설치
# https://github.com/Mirantis/cri-dockerd/releases/download/v${VERSION}/cri-dockerd-${VERSION}.${ARCH}.tgz
# 최신 버전 설치
$ VER=$(curl -s https://api.github.com/repos/Mirantis/cri-dockerd/releases/latest|grep tag_name | cut -d '"' -f 4|sed 's/v//g')
$ echo $VER
# v0.3.3 패키지 설치 예시 - 2023.06.21 일자 lts 버전
$ wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.3/cri-dockerd-0.3.3-3.el7.x86_64.rpm -O cri-dockerd.rpm
# CentOS7 에서 cri-docker.rpm 설치
$ yum install -y cri-dockerd.rpm
$ systemctl daemon-reload
$ systemctl enable cri-docker.service
$ systemctl enable --now cri-docker.socket
$ systemctl status cri-docker
$ cri-dockerd --version
# 리포지토리 설정
$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# LTS 버전 설치
$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# v1.27.0 설치
$ sudo yum install -y kubelet-1.27.0 kubeadm-1.27.0 kubectl-1.27.0 --disableexcludes=kubernetes
$ sudo systemctl enable --now kubelet
$ poweroff
--apiserver-advertise-address
는 본인의 Master 노드를 입력$ kubeadm init --apiserver-advertise-address=192.168.1.159 --pod-network-cidr=10.244.0.0/16 --cri-socket /run/cri-dockerd.sock
--apiserver-advertise-address <string> | API 서버가 수신 중임을 알리는 IP 주소, 설정하지 않으면 기본 네트워크 인터페이스 사용 - 즉, 마스터 노드 |
--pod-network-cidr <string> | 포드 네트워크의 IP 주소 범위를 지정, 설정된 경우 컨트롤 플레인은 모든 노드에 CIDR을 자동으로 할당 |
--cri-socket <string> | Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this value; use this option only if you have more than one CRI installed or if you have non-standard CRI socket. |
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
# root 유저일 경우 실행
$ export KUBECONFIG=/etc/kubernetes/admin.conf
istio
) > ✅ Weave Net(네트워크 정책 적용 가능; Istio
) > Flannel(실습용으로 적합했다; 네트워크 정책 적용 불가능)$ kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
kubeadm init ...
이후 나온 스크립트$ kubeadm join 192.168.1.159:6443 --token ynubvp.41q3tia2ylqp7pjl \
--discovery-token-ca-cert-hash sha256:e859a67868e72e981e26062548f20f516a85a120ed2ea3452635fd7804126a84
# 런타임이 필요한 경우 "--cri-socket /run/cri-dockerd.sock" 추가
$ kubeadm join 192.168.1.159:6443 --token ynubvp.41q3tia2ylqp7pjl \
--discovery-token-ca-cert-hash sha256:e859a67868e72e981e26062548f20f516a85a120ed2ea3452635fd7804126a84 --cri-socket /run/cri-dockerd.sock
$ kubectl get no
$ source <(kubectl completion bash)
# 시스템이 껏다 켜지더라도 자동완경 가능하게 설정
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ exit
$ kubectl version --client
$ kubectl get all
# CentOS7 에 맞게
# x86_64 아키텍처용 Istio 1.18.0 버전 다운로드
$ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.18.0 TARGET_ARCH=x86_64 sh -
################# 참고 #################
# 특정 아키텍처와 특정버전 설치
$ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=버전명시 TARGET_ARCH=아키텍처 명시 sh -
# 최신 LTS 버전
$ curl -L https://istio.io/downloadIstio | sh -
########################################
# 환경 변수 세팅
$ export PATH=$PWD/bin:$PATH
install 명령 수행
# 기본 프로필로 설치, 데모 프로필(istioctl install --set profile=demo)
$ istioctl install -y
$ kubectl get -n istio-system po
# "default" 네임스페이스에 프록시 주입 설정
$ kubectl label namespace default istio-injection=enabled
애드온 목록
$ cd ./istio-1.18.0/samples/addons/
# NodePort: 30281 로 부여함.
$ vi ./istio-1.18.0/samples/addons/prometheus.yaml
$ kubectl apply -f ./istio-1.18.0/samples/addons/prometheus.yaml
$ kubectl -n istio-system get svc
# http 부분 : NodePort: 30291 로 부여함.
$ vi ./istio-1.18.0/samples/addons/kiali.yaml
$ kubectl apply -f ./istio-1.18.0/samples/addons/kiali.yaml
$ kubectl -n istio-system get svc
# NodePort: 30282 로 부여함.
$ vi ./istio-1.18.0/samples/addons/grafana..yaml
$ kubectl apply -f ./istio-1.18.0/samples/addons/grafana..yaml
$ kubectl -n istio-system get svc
Terraform 으로 인프라 구축
k8s cluster - X => EKS 로 대체
istio
monitoring - addons 들 사용법
k8s
istio 설정
소프트웨어 개발
istio 에서 외부 트래픽 관리하기 ?
$ sudo kubeadm reset
$ sudo kubeadm reset --cri-socket /run/cri-dockerd.sock
$ sudo systemctl restart kubelet
$ sudo reboot