K8S가 1.20ver 이후로 Docker를 Container Runtime으로 더이상 지원하지 않습니다.
K8S는 컨테이너 런타임과 통신할 때 CRI라는 표준 인터페이스 API를 사용하지만,
Docker는 이를 지원하지 않았기 때문에 중간에 Dockershim이라는 서비스로 API, CRI의 변환을 하여 이용.
그러나 이 서비스가 Deprecation 되면서 가까운 미래에 삭제될 예정이므로 더이상 Docker를 사용할 수 없다.
따라서, K8S는 CRI를 지원하는 컨테이너 런타임만 사용할 수 있다.
처음 계획은 CRI-O를 선택했었다.
그래서 ContainerD를,
현재 계획에서, Linux와 Windows를 활용하기 때문에 두 운영체제에서 작동하도록 설계된 ContainerD를 선택합니다.
CRI-containerd
이후 ContainerD 1.1에서는 CRI-Containerd 데몬이 ContainerD CRI Plugin으로 리팩터링되면서,
ContainerD에 기본 내장됩니다.
CRI-containerd와 달리 CRI 플러그인은 직접 함수 호출을 통해 containerd와 상호 작용합니다.
사용자는 이제 containerd1.1과 함께 Kubernetes를 직접 사용할 수 있습니다.
1. 상황에 맞게 물리 PC 또는 가상머신 준비.
2. 각 PC에 Container Runtime을 설치.
3. Container Runtime의 Config를 수정하는데, Network, SSH, DNS등등 Add-ons들을 설정하면 편하다.
4. 각 PC 또는 머신에 Kubernetes를 설치한다.
5. Master node가 생성한 Cluster join 명령어를 각 Worker nodes에서 실행한다.
6. 잘 작동하는지 확인한다.
Ubuntu Official
Rufus로 Ubuntu USB 만들기
Windows가 설치된 컴퓨터에 Ubuntu 설치하는 방법
Ubuntu를 이렇게 설치하는 이유
본인의 개인 PC가 아니라서 이용이 끝나면 Windows로 되돌려야함.
그래서 하드디스크 파티션을 나누고 설치한 다음
사용이 끝나면 포맷 후 파티션을 해제해 되돌릴 예정이다.
Ubuntu OS 정보 확인
nproc #코어 확인 free -h #메모리 확인 ifconfig -a #Mac 확인 sudo cat /sys/class/dmi/id/product_uuid #product_uuid 확인
swap 메모리 비활성화
sudo swapoff -a sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab sudo free -m #swap 메모리가 0인지 확인
스왑 공간을 비활성화
- kubelet 이 제대로 동작하기 위해서는 swap 메모리를 비활성화
- 시스템이 메모리를 디스크로 스왑 방지
- 일관되고 예측 가능한 메모리 사용
- Kubernetes Pod에는 특정 양의 메모리를 할당
- 중요한 데이터가 스왑 파일의 디스크에 기록 방지
- /etc/fstab 은 리눅스 시스템에서 부팅시 자동으로 마운트해주는 정보를 저장
방화벽 설정
sudo apt-get install firewalld systemctl start firewalld systemctl enable firewalld firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https
master node
firewall-cmd --permanent --add-port=2379-2380/tcp firewall-cmd --permanent --add-port=6443/tcp firewall-cmd --permanent --add-port=10250-10252/tcp firewall-cmd --permanent --add-port=8285/udp firewall-cmd --permanent --add-port=8472/udp
worker node
firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=30000-32767/tcp firewall-cmd --permanent --add-port=8285/udp firewall-cmd --permanent --add-port=8472/udp firewall-cmd --permanent --add-port=26443/tcp firewall-cmd --reload
K8S Cluster를 구성하는데 필요한 Port 번호와 HTTP, HTTPS를 방화벽으로부터 허용한다.
참고로 Master, Worker 구분해놨지만 다 허용해야한다.
Kubernetes 클러스터를 실행하는 데 필요한 두 개의 커널 모듈을 로드
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter
- 이 명령은
/etc/modules-load.d/
디렉토리에containerd.conf
라는 파일을 생성하고overlay
및br_netfilter
커널 모듈을 부팅 시 로드해야 하는 모듈 목록에 추가합니다.
overlay
모듈은 Docker 및 Containerd와 같은 컨테이너 런타임에서
컨테이너 파일 시스템을 생성하는 데 사용되는 OverlayFS 파일 시스템을 제공합니다.
br_netfilter
모듈은 Linux 브리지 네트워크 스택에서 iptables를 사용하여 네트워크 필터링을 지원합니다. 이는 Calico 및 Flannel과 같은 Kubernetes 네트워킹 플러그인에 필요합니다.
overlay 모듈
- Docker와 같은 컨테이너 런타임용 스토리지 드라이버이며 컨테이너용 계층화된 파일 시스템을 생성하는 방법을 제공
- Kubernetes에서 컨테이너화된 워크로드를 실행하는 데 필요.
br_netfilter 모듈
- 커널에 의한 네트워크 패킷 필터링을 활성화하는 데 사용
- 네트워크 브리지 생성을 허용하고 iptables 규칙을 사용하여 네트워크 트래픽을 제어
PoD와 서비스 간의 적절한 네트워킹 및 통신
필요한 sysctl 파라미터를 정의합니다.
이 파라미터는 재시작하더라도 그대로 유지됩니다.cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
- Kubernetes 네트워킹을 위한 패킷 전달 및 IP 매스커레이딩을 활성화
- IP 매스커레이딩
- 개인 네트워크의 컴퓨터 또는 네트워크 장치가 인터넷 연결을 제공하는 라우터 또는 방화벽의 공용 IP 주소와 일치하는 소스 IP 주소를 사용하여 인터넷으로 향하는 패킷을 투명하게 전송하도록 구성된 기술
- 일반적으로
개인 네트워크의 NAT(네트워크 주소 변환)
에 사용됩니다.Kubernetes 네트워킹의 맥락
에서 IP 매스커레이딩은 사설 네트워크의 포드가 인터넷 또는 클러스터 외부의 다른 네트워크와 통신할 수 있도록 하는 데 사용Linux 커널에서 IP 전달을 활성화하여 네트워크 트래픽이 노드를 통과하도록 합니다.
IP 전달을 통해 Linux 시스템은 한 네트워크 인터페이스에서 다른 네트워크 인터페이스로 패킷을 전달할 수 있습니다.
네트워크 주소 변환(NAT)에 유용
- iptables
- 리눅스에서 방화벽 설정을 도와주는 도구
- iptables 가 브리지된 네트워크 트래픽을 제대로 보기 위해서는
net.bridge.bridge-nf-call-iptables
값이1
으로 되어야 한다는 것시스템을 재시작하지 않고 sysctl 파라미터를 반영하기 위한 작업입니다.
sudo sysctl --system
SELinux permissive
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config sestatus
- SELinux는 관리자가 시스템 접근 권한을 제어하기 위한 보안 아키텍쳐
- 쿠버네티스 클러스터에서는 SELinux 를 permissive 모드로 설정
- 쿠버네티스가 Pod 네트워크에 필요한 호스트 파일시스템에 접근하기 위해
ContainerD 프로젝트에서 제공하는 공식 설치 가이드에 따라 모든 노드에 ContainerD를 설치할 수 있습니다.
4.1.1 Containerd.io 설치
sudo apt-get update
sudo apt-get update는 구성된 리포지토리에서 로컬 패키지 인덱스를 업데이트
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release
HTTPS를 활용해 저장소에 접근하기 위해 위의 패키지들을 설치
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # Docker를 **stable** 버전으로 설치하기 위해 아래의 명령을 내립니다. $ echo "deb [arch=amd64 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 > /dev/null
HTTPS 리포지토리와 함께 apt 패키지 관리자를 사용하는 데 필요한 패키지를 설치하고 Docker GPG 키를 추가
GPG Key
GPG(GNU Privacy Guard) 키
는 안전한 통신과 디지털 콘텐츠의 진위를 확인하는 데 사용되는 암호화 키입니다.- 소프트웨어 설치와 관련하여 GPG 키는 소프트웨어 패키지 및 리포지토리의 신뢰성과 무결성을 확인하는 데 사용됩니다.
sudo apt-get update
새로운 저장소가 추가되었으므로, 업데이트
sudo apt-get install containerd.io
containerd.io 설치
containerd : 완전 구현
containerd.io : 경량 런타임 특정 패키지 설치사실 어떤 것도 사용 가능하다.
sudo systemctl status containerd
설치 확인
4.1.2 ContainerD 구성 파일을 만듭니다.
sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml
containerd를 실행하기 전에 containerd의 기본 설정을 정의해줍니다.
4.1.3 config.toml 파일을 수정합니다.
sudo nano /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
systemd를 cgroup driver로 사용하기 는 꼭 설정해야한다.
# For OpenSSH CoreDNS [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true ShimCgroup = "system.slice" CgroupParent = "kubelet" Debug = true additional_env = [ "SSH_AUTH_SOCK=/run/user/0/openssh_agent.sock", "COREDNS_CONFIG=/etc/coredns/Corefile", ]
SystemdCgroup
: systemd를 사용하여 cgroup 계층 관리ShimCgroup
: shim 프로세스용 cgroup(containerd와 runc 간의 통신을 처리하는 중간 프로세스)CgroupParent
: 컨테이너의 상위 cgroupDebug
: runc에 대한 디버그 모드를 활성화합니다.additional_env
SSH_AUTH_SOCK
및COREDNS_CONFIG
를 포함하여 컨테이너에 설정할 추가 환경 변수 목록입니다.- 컨테이너에 전달될 컨테이너 런타임에 대한 환경 변수를 설정합니다.
- 클러스터에 영향을 주는 변경은 아니다. (다만, 해봐야지 아는 것이니까.)
- 이것으로 여기서 생성한 컨테이너들은 SSH 통신이 가능하고 DNS가 적용된다.
4.1.4 수정한 config.toml을 적용 및 재실행.
sudo systemctl restart containerd
# 원하는 컨테이너형 윈도우즈 바이너리 다운로드 및 추출
$Version="1.6.4"
curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz
tar.exe xvf .\containerd-windows-amd64.tar.gz
# 복사 및 구성
# ProgramFiles 폴더로 복사하고 config.toml 설정
Copy-Item -Path ".\bin\*" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force
cd $Env:ProgramFiles\containerd\
.\containerd.exe config default | Out-File config.toml -Encoding ascii
# 구성을 검토합니다. 설정에 따라 조정할 수 있습니다:
# - the sandbox_image (Kubernetes pause image)
# - cni bin_dir and conf_dir locations
Get-Content config.toml
# 서비스 등록 및 시작
.\containerd.exe --register-service
Start-Service containerd
containerd 가 윈도우의 서비스 형태로 실행됩니다.
설치 전에,
- 클러스터의 모든 시스템 간의 완벽한 네트워크 연결
- Swap 메모리 비활성화
- Container Runtime 설치
이후에 진행해야 한다.
6.1.1 K8S 설치 (Master, Worker)
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
Kubernetes GPG 키를 검색하여 시스템의 키링에 추가
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
시스템의 apt 소스 목록에 Kubernetes 레포지토리를 추가
sudo apt-get install kubeadm kubelet kubectl -y
apt-get 패키지 관리자를 사용하여 kubeadm, kubelet 및 kubectl 패키지를 설치
sudo apt-mark hold kubeadm kubelet kubectl containerd
kubeadm, kubelet 및 kubectl 패키지의 버전 고정
sudo kubeadm config images pull
네트워크 또는 인터넷이 없을 상황에 대비해 image를 가져오는 것
미리 이미지를 가져오면 초기화 또는 결합 프로세스가 더 빠르고 안정적일 수 있습니다.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- --pod-network-cidr
- 클러스터에 사용할
Pod 네트워크 CIDR
을 지정합니다.- 이는 네트워킹 솔루션이 포드에 IP 주소를 할당하는 데 필요합니다.
- Ex)
--pod-network-cidr=10.244.0.0/16.
- --apiserver-advertise-address
- API 서버가 퍼블릭 엔드포인트에 대해 알릴 IP 주소를 지정합니다.
- API 서버와 통신하도록 kubelet 및 기타 구성 요소를 구성하는 데 사용됩니다.
- Ex)
--apiserver-advertise-address=192.168.1.100.
- --control-plane-endpoint
- 컨트롤 플레인 구성요소가 서로 통신하는 데 사용할 엔드포인트를 지정합니다.
- 컨트롤 플레인과 통신하도록 kubelet 및 기타 구성 요소를 구성하는 데 사용됩니다.
- Ex)
--control-plane-endpoint="k8s-control-plane:6443".
- --upload-certs
- 구성 요소 간의 통신 보안에 사용되는 TLS 인증서를 생성하고 저장합니다
- 이 플래그가 설정되면 kubeadm은 새 인증서를 생성하고 이를 kubeadm-certs라는 Kubernetes 비밀에 저장합니다.
- 그런 다음 이 암호를 다른 노드에 복사하여 클러스터에 연결할 수 있습니다.
- Ex)
--upload-certs.
- --ignore-preflight-errors
- 클러스터를 초기화하기 전에 발생할 수 있는 특정
preflight
오류를 무시합니다.- 수행 중인 작업을 알고 있고 오류를 안전하게 무시할 수 있다고 확신하는 경우에만 이 플래그를 사용하십시오.
- Ex)
--ignore-preflight-errors=NumCPU.
- --config
- kubeadm init 옵션을 지정하는 구성 파일의 경로를 지정합니다.
- 명령줄 인수를 지정하는 대신 사용할 수 있습니다.
- Ex)
--config=/path/to/kubeadm-config.yaml.
위의 명령어를 실행하면 Worker node를 클러스터에 가입하는데 사용할 수 있는 명령이 출력됩니다.
예를 들어:kubeadm join 192.168.0.100:6443 --token abcdef.1234567890abcdef \ --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
이 명령을 사용하여 작업자 노드를 클러스터에 가입시킵니다.
이 명령을 안전한 곳에 보관해야한다.
대체로 안쓰이지만 오류나면 이것도...
unset KUBECONFIG export KUBECONFIG
mkdir -p $HOME/.kube
Kubernetes 구성 파일을 저장하기 위해 홈 디렉터리에 .kube라는 디렉터리를 만듭니다(아직 없는 경우).
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- 마스터 노드의 /etc/kubernetes 디렉터리에서 홈의 .kube 디렉터리로 구성 파일을 복사합니다.
- admin.conf 파일에는 마스터 노드의
Kubernetes API 서버와 통신하는 데 필요한 자격 증명 및 엔드포인트 정보
가 포함되어 있습니다.
sudo chown $(id -u):$(id -g) $HOME/.kube/config
구성 파일의 소유권을 사용자 계정으로 변경하여 읽고 수정할 수 있도록 합니다.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Kubernetes 클러스터에 Flannel을 배포하고 서로 다른 작업자 노드에서 실행되는 포드 간의 통신을 활성화하는 데 사용
현재 flannel을
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
이 경로에서 받은 default flannel yaml을 그대로 설치해서 사용다만, default로 설정 그대로 사용하게 되면 flannel은
8472 Port
로 동작함.하지만 Windows Worker Node를 추가하기 위해서는
8472 Port를 사용하면 안되고 4096 또는 4789 Port로 동작해야함.
띠라서, flannel Port를 변경해야된다.
# 확인 kubectl describe cm kube-flannel-cfg -n kube-system # 수정 kubectl edit cm kube-flannel-cfg -n kube-system
수정 후 저장하고, configMap 적용을 위해 flannel 삭제 -> DaemonSet 이므로 재실행
kubectl get pod -n kube-system -o wide
로 확인 후 해당 flannel Pod들 삭제만 해주면 된다.
각 Worker node에게
kubeadm join 192.168.0.100:6443 --token abcdef.1234567890abcdef \ --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
1. Docker Desktop 설치 후 K8S 구성
매우 간편하게 K8S 환경을 구축할 수 있다.
2. WSL2로 Windows Linux 환경을 구축 후 K8S 구성
WSL2만 설치하면 Linux처럼 사용할 수 있어 익숙하다.
3. kubectl, Wins, kubelet, kubeadm 설치 후 Join
Windows의 PowerShell을 Administrator 권한으로 실행시켜서 진행함.
curl.exe -LO "https://dl.k8s.io/release/v1.26.0/bin/windows/amd64/kubectl.exe"
# SIG-Windows is really the center for all things Windows in Kubernetes curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
설치 후 환경 변수 설정하여 CMD | PS에서 실행할 수 있도록 한다.
.\PrepareNode.ps1 -KubernetesVersion v1.26.4
우리는 OpenSSH를 설치하기 전에도 노드들끼리 SSH통신이 가능하다.
OpenSSH를 설치함으로써 무슨 차이가 있는가?OpenSSH 설치 전에 SSH 통신
- OpenSSH를 네트워크 추가 기능으로 설치하기 전에 노드 간 SSH 통신을 설정하면 SSH를 통해 각 노드에 직접 액세스할 수 있습니다.
- Kubernetes 외부의 특정 명령을 문제 해결, 모니터링 또는 실행하는 데 유용할 수 있습니다.
- 그러나 이 접근 방식을 사용하려면 수동으로 SSH를 구성하고 SSH 키를 관리해야 하므로 시간이 많이 걸리고 노드 수가 증가함에 따라 확장성이 떨어질 수 있습니다.
OpenSSH 설치 후에 SSH 통신
- OpenSSH를 설치하면 Kubernetes의 내장 네트워킹 및 보안 기능을 활용하여 노드 간의 SSH 통신을 관리하고 자동화할 수 있습니다.
- OpenSSH를 사용하면 각 노드에서 SSH 키를 설정하고 관리할 필요 없이 클러스터의 Pod가 안전하고 안정적으로 서로 통신할 수 있습니다.
- 이 접근 방식은 네트워킹 및 보안 측면을 처리하기 위해 Kubernetes에 의존할 수 있으므로 확장 가능하고 관리하기가 더 쉽지만 SSH를 통해 각 노드에 대한 직접 액세스를 제공하지 않을 수 있으므로 특정 사용 사례에서 단점이 될 수 있습니다.
OpenSSH는 Flannel 또는 Calico와 같은 다른 옵션보다 성능이 낮고 보안 수준이 낮을 수 있으므로 Kubernetes 클러스터에 권장되는 네트워킹 솔루션이 아닙니다.
7.1.1 각 노드에 OpenSSH 설치
sudo apt-get update sudo apt-get install -y openssh-server
7.1.2 노드의 IP 주소 찾기
ip addr show
7.1.3 Master node에서 새 OpenSSH Conf 생성
sudo nano /etc/ssh/sshd_config.d/k8s.conf
7.1.4 구성 파일에 다음 줄을 추가합니다.
Match Address 10.244.0.0/16 PermitRootLogin yes PermitTunnel yes AllowAgentForwarding yes AllowTcpForwarding yes X11Forwarding yes
참고: 10.244.0.0/16을 Pod 네트워크의 CIDR 범위로 바꾸십시오.
7.1.5 OpenSSH 다시 시작.
sudo systemctl restart sshd
7.1.6 방화벽 ssh에 대해 허용
$ sudo ufw allow ssh
OpenSSH의 있고 없고 차이
가정 : SSH를 사용하여 한 노드에서 다른 노드로 파일을 복사한다.
OpenSSH가 설치되어 있다면,
scp /path/to/local/file username@remote:/path/to/destination
OpenSSH가 설치된 상태에서 간단히 scp 명령을 사용할 수 있습니다.
OpenSSH가 설치되어 없다면,
cat /path/to/local/file | ssh username@remote 'cat > /path/to/destination'
OpenSSH가 없으면 cat 및 ssh와 같은 명령을 함께 사용해야 합니다.
1. Master node에 로그인하고 다음 명령 실행하여 Flannel 설치
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2. Flannel Pod가 실행되기 시작할 때까지 기다리기. 몇 분 소모 이후 Pod 상태 확인
kubectl get pods -n kube-system
3. Flannel Pod이 실행되면 작업자 노드 중 하나에서 다음 명령을 실행하여 노드 간 연결을 테스트
ping <IP address of another node>
ping 할 수 있다면 Flannel 성공적 설치 완료
1. Master node에 로그인하고 다음 명령 실행하여 Calico 설치
kubectl create -f https://docs.projectcalico.org/v3.19/manifests/calico.yaml
2. Calico Pod가 실행되기 시작할 때까지 기다리기. 몇 분 소모 이후 Pod 상태 확인
kubectl get pods -n kube-system
3. Calico Pod이 실행되면 작업자 노드 중 하나에서 다음 명령을 실행하여 노드 간 연결을 테스트
ping <IP address of another node>
ping 할 수 있다면 Flannel 성공적 설치 완료
그래도 coredns.yaml로 설정해야 한다.
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl apply -f https://github.com/coredns/deployment/blob/master/kubernetes/coredns.yaml
kubectl get pods -n kube-system -l k8s-app=kube-dns
이것과 비슷한 출력이 있어야 한다.
NAME READY STATUS RESTARTS AGE coredns-5c98db65d4-5npsl 1/1 Running 0 5m coredns-5c98db65d4-jq2bm 1/1 Running 0 5m
kubeadm join 시 --node-name 로 설정할 수 있다.
sudo kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash> --node-name <custom-node-name>
master@master-k8s:/$ sudo kubectl get node
NAME STATUS ROLES AGE VERSION
master-k8s Ready control-plane 94m v1.26.3
work1-k8s Ready <none> 23s v1.26.3
vimosoft Ready <none> 1s v1.26.3
master@master-k8s:/$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether a8:5e:45:5d:d4:ff brd ff:ff:ff:ff:ff:ff
inet 192.168.0.123/24 brd 192.168.0.255 scope global dynamic noprefixroute enp4s0
valid_lft 5738sec preferred_lft 5738sec
inet6 fe80::8174:84b6:f2dc:9d19/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether 62:9e:9e:66:b4:d4 brd ff:ff:ff:ff:ff:ff
inet 10.244.0.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
inet6 fe80::609e:9eff:fe66:b4d4/64 scope link
valid_lft forever preferred_lft forever
4: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
link/ether ee:80:74:85:f0:11 brd ff:ff:ff:ff:ff:ff
inet 10.244.0.1/24 brd 10.244.0.255 scope global cni0
valid_lft forever preferred_lft forever
inet6 fe80::ec80:74ff:fe85:f011/64 scope link
valid_lft forever preferred_lft forever
7: veth0dfa08b3@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default
link/ether 8a:ce:04:cf:df:2e brd ff:ff:ff:ff:ff:ff link-netns cni-2c120a52-0b01-d49c-b02c-98f5509c26b6
inet6 fe80::88ce:4ff:fecf:df2e/64 scope link
valid_lft forever preferred_lft forever
8: veth6b4c3d66@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default
link/ether 7a:58:69:51:cb:ae brd ff:ff:ff:ff:ff:ff link-netns cni-03edc287-173a-b701-ac76-b82436d19f9c
inet6 fe80::7858:69ff:fe51:cbae/64 scope link
valid_lft forever preferred_lft forever
master@master-k8s:/$ ssh work1@10.244.1.0
The authenticity of host '10.244.1.0 (10.244.1.0)' can't be established.
ECDSA key fingerprint is SHA256:amAD/tlcctnQOowAZ7KAEw8V/MtE5/m6GgNGPOOOfo0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.244.1.0' (ECDSA) to the list of known hosts.
work1@10.244.1.0's password:
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-69-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
* Introducing Expanded Security Maintenance for Applications.
Receive updates to over 25,000 software packages with your
Ubuntu Pro subscription. Free for personal use.
https://ubuntu.com/pro
Expanded Security Maintenance for Applications is not enabled.
12 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
9 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm
New release '22.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Mon Apr 3 13:19:44 2023 from 192.168.0.123
work1@work1-k8s:~$