반응형
Docker 사용하여 간단하게 Let's Encrypt 와일드카드 SSL 인증서 발급/갱신 방법
Let's Encrypt 와일드 카드 SSL 인증서 발급

Docker로 간단하게 Let's Encrypt SSL 인증서 발급받는 방법 입니다. 아래 내용에서 *.yourdomain.com / youremail@google.com 부분만 자신의 도메인과 이메일 주소로 변경 합니다.

뒤의 내용은 ACME 서버 구독 동의, EFF 재단에 이메일 공유 거부의 내용 입니다.

docker run -it --rm --name certbot \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  certbot/certbot certonly -d '*.yourdomain.com' --email youremail@google.com --agree-tos --no-eff-email -d domain.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

 

아래는 예시 화면 입니다. "rcB~~"의 토큰을 _acme-challenge.yourdomain.com. 도메인의 TXT 레코드로 등록 해줍니다.  (토큰 값은 매번 다릅니다) 등록 후 약 2~3분이 지나고 TXT 레코드가 잘 등록 되었는지 확인 후 엔터를 눌러 진행하면 발급이 완료 됩니다.

 

Let's Encrypt 와일드 카드 SSL 인증서 갱신

Let's Encrypt 인증서의 경우 유효 기간이 90일 이며, 만료일 30일 전부터 갱신이 가능 합니다. 

docker run -it --rm --name certbot \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  certbot/certbot renew --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

 

Let's Encrypt 인증서의 유효 기간이 짧다보니, 아래와 같이 renew 스크립트 파일을 만들어 크론탭에 등록하여 자동 갱신하도록 설정하는것이 좋습니다.

cd /root
vim letsencrypt_renew.sh

#!/bin/bash
docker run -it --rm --name certbot \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  certbot/certbot renew --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

:wq

chmod 750 /root/letsencrypt_renew.sh
crontab -e

# 짝수달 3일 0시 0분에 renew 스크립트 실행
00 00 03 */2 * /root/letsencrypt_renew.sh
반응형
반응형
  • 쿠버네티스 kube-flannel CrashLoopBackOff 해결 방법 (Error registering network: failed to acquire lease: node "node1" pod cidr not assigned)

아래와 같이 kube-flannel이 CrashLoopBackOff가 발생하였습니다.

watch kubectl get pods --all-namespaces

 

로그를 확인해본 결과 Error registering network: failed to acquire lease: node "node1" pod cidr not assigned 에러가 발생중인것을 확인할 수 있었는데, 해외 문서에 따르면 불분명한 문제(?)로 Pod CIDR 임대 실패하여 발생하는 에러라고 합니다.

kubectl -n kube-system logs -f kube-flannel-ds-h97vn

 

저는 아래와 같이 해당 현상을 해결할 수 있었는데, 우선 아래 명령어를 입력하여 kube-controller-manager.yaml 파일을 열어주세요.

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

 

allocate-node-cidrs=true는 재대로 설치 했다면 true로 되어있을 것이고, cluster-cidr를 확인 후 나와줍니다.

 

이후 master node에서 아래와 같이 입력해주면 되는데, 각자의 환경에 맞게 노드명과 CIDR를 수정하여 입력해주시면 됩니다.

저의 경우 node1, node2, node3이 있으므로 노드명을 변경해가며 총 3번 입력 후 kube-flannel이 재대로 Running 되는것을 확인할 수 있습니다.

# kubectl patch node [노드명] -p '{"spec":{"podCIDR":"위에서 확인한 CIDR"}}'
kubectl patch node node1 -p '{"spec":{"podCIDR":"172.168.0.0/24"}}'

 

반응형
반응형
  • 쿠버네티스 온프레미스 환경에서 직접 설치하기 (kubernetes install on premise, kubeadm)

온프레미스 환경에서 쿠버네티스를 설치하기 전에 사전 작업들을 해주어야할 필요성이 있습니다. 해당 글은 사전작업 → Docker 설치 → Kubernetes 설치 및 master-worker node 연동 순으로 진행 됩니다.

저의 환경은 아래와 같으며 본인 환경에 따라 적절히 변경하여 설치를 진행 해주시면 됩니다.

  1. OS : CentOS 7
  2. master node 1대, worker node 3대 구성
  3. 모든 서버 root 계정으로 설치 및 연동 진행

 

  • 1) 호스트 네임 변경 (master node, worker node 적용)

아래와 같이 echo와 hostnamectl 명령어를 이용해 호스트 네임을 변경해주세요. 재부팅은 하지 않으셔도 됩니다.

# master node
echo "master" > /proc/sys/kernel/hostname
hostnamectl set-hostname master

# worker node1
echo "node1" > /proc/sys/kernel/hostname
hostnamectl set-hostname node1

# worker node2
echo "node2" > /proc/sys/kernel/hostname
hostnamectl set-hostname node2

# worker node3
echo "node3" > /proc/sys/kernel/hostname
hostnamectl set-hostname node3

 

  • 2) hosts 파일 변경 (master node, worker node 적용)

master node, worker node의 정보를 hosts 파일에 적용 합니다. 아래 명령어를 사용해 master node, worker node 모두 적용 시켜줍니다.

# master node
cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3
EOF

# node1
cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3
EOF

# node2
cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3
EOF

# node3
cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3
EOF

 

  • 3) firewalld 설정 (master node 적용)

firewalld를 사용중인 경우 master node에만 아래와 같이 방화벽 정책 설정을 진행 해주세요.

* 기존에 firewalld를 사용하지 않고 있는데 아래 명령어를 입력할 경우 기존 서비스하고 있던것들이 deny되어 장애가 발생할 수 있습니다.

# master node
systemctl start firewalld
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload

 

  • 4) selinux, swap 비활성화 및 br_netfilter 모듈 활성화(master node, worker node 적용)

master node 서버에서 아래와 같이 selinux, swap 비활성화 및 br_netfilter 모듈을 활성화 해주세요.

setenforce 0
sed "s/SELINUX=enforcing/SELINUX=disabled/g" -i /etc/sysconfig/selinux
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
swapoff -a
sed -e 's/\(.*swap\)/#\1/' -i /etc/fstab

 

  • 5) Docker 설치 (master node, worker node 적용)
yum -y install yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && yum -y install docker-ce
systemctl start docker && systemctl enable docker

 

  • 6) Kubernetes 저장소 추가 및 설치 (master node, worker node 적용)
# master node
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

yum install -y kubelet kubeadm kubectl


# worker node
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

yum install -y kubelet kubeadm

 

  • 7) kubelet 서비스 등록 및 시작 (master node, worker node 적용)
systemctl start kubelet && systemctl enable kubelet

 

  • 8) Kubernetes 초기화 작업 (master node 적용)

master node 서버에서 아래 명령어를 이용해 k8s 초기화 작업을 진행 합니다.  apiserver쪽에는 master node ip를 입력해주시고 그 뒤에는 클러스터 pod netowrk CIDE를 작성해주세면 됩니다.

# master node
#kubeadm init --apiserver-advertise-address=[마스터 노드 IP] --pod-network-cidr=[POD NETWORK CIDE]
kubeadm init --apiserver-advertise-address=192.168.100.10 --pod-network-cidr=172.16.0.0/24

 

초기화 작업이 성공적으로 종료되면 아래와 같이 token 볼 수 있는데, 이 token으로 worker node와 클러스터 연동을 해야하기 때문에 별도로 저장하여 보관해주시길 바랍니다.

 

  • 9) Cluster에게 root 권한 부여 (master node 적용)
# master node
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

  • 10) Calico 배포 (master node 적용)
# master node
curl https://docs.projectcalico.org/archive/v3.8/manifests/calico.yaml -O

 

이후 vim 편집기를 이용해 calico.yml 파일을 열은 후 아래 라인을 주석해제하고 8번에서 진행한 Pod CIDE로 수정을 해주시면 됩니다.

 

calico.yaml 파일을 배포 해주세요.

# master node
kubectl apply -f calico.yaml

 

이후 아래 명령을 통해 calico가 정상적으로 실행중인지 확인할 수 있습니다.

* coredns CrashLoopBackOff 발생 시 참고 : nirsa.tistory.com/293

# master node
watch kubectl get pods --all-namespaces

 

  • 11) kubernetes 초기화 작업 (worker node 적용)

이제 8번에서 작업 후 얻었던 token을 사용할때가 왔습니다. 따로 저장해두었던 token을 worker node 서버들에게 입력 해주세요.

 

  • 12) 연동 확인

kubectl get nodes 명령을 사용하면 아래와 같이 master, node1, node2, node3이 모두 연동된것을 확인할 수 있습니다.

 

반응형
반응형
  • 쿠버네티스 "coredns CrashLoopBackOff", "10.96.0.1:443: connect: no route to host" 에러 (firewalld)

아래와 같이 corends CrashLoopBackOff가 발생하며 Pod Log를 확인했을때 "10.96.0.1:443: connect: no route to host" 에러가 발생할 경우 firewalld가 실행중인것은 아닌지 확인해볼 필요성이 있습니다.

watch kubectl get pods --all-namespaces

 

kubectl -n kube-system logs -f coredns-74ff55c5b-k6jm6

 

저의 경우 아래 명령들을 통해 에러가 해결되었습니다.

systemctl stop firewalld
systemctl stop kubelet
systemctl stop docker

iptables --flush
iptables -tnat --flush

systemctl start kubelet
systemctl start docker
systemctl start firewalld

 

반응형

+ Recent posts