ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [k8s] 외부ip 변경시 바꿔야 할것
    Web 2022. 1. 12. 20:34

    개발서버의 외부ip가 변경되어 쿠버네티스 동작이 안되었다.

    현재 서버: k8s master1대, node2대, jenkins , nexus

     

    해결법을 정리한다.

     

    1. /etc/kubernets 내의 설정 파일들 중 이전 아이피를 신규 아이피로 변경

    cd /etc/kubernetes
    oldip=118.129.153.122
    newip=192.168.1.161
    # 이전 아이피가 포함된 파일들을 조회한다.
    find . -type f | xargs grep $oldip
    # 이전 아이피를 신규 아이피로 바꾼다.
    find . -type f | xargs sed -i "s/$oldip/$newip/"
    # 정상적으로 다 바뀌었는지 확인.
    find . -type f | xargs grep $newip

    2. 혹시 모르니 일단 인증서를 백업해둡니다.

    # 백업
    mkdir ~/k8s-old-pki
    cp -Rvf /etc/kubernetes/pki/* ~/k8s-old-pki

    3. /etc/kubernetes/pki에 이전 아이피를 가지고 있는 인증서가 있는지 확인.

    cd /etc/kubernetes/pki
    for f in $(find -name "*.crt"); do 
      openssl x509 -in $f -text -noout > $f.txt;
    done
    grep -Rl $oldip .
    # 확인 되었다면 삭제 할까요? 어떤건지 알면 되니까요.
    for f in $(find -name "*.crt"); do rm $f.txt; done

    4. kubectl에서 –server 값으로 사용할 신규 아이피를 kubernetes 란 호스트명으로 정의

    vi /etc/hosts
    (newip) kubernetes
    # kubernetes는 본인이 사용할것으로 적으면 된다.

    5. kube-system내 configmap에서 이전 아이피를 신규 아이피로 수정.

    # configmap 파일 리스트를 조회한후, 
    configmaps=$(kubectl --server=https://java-cd:6443 -n kube-system get cm -o name | \
      awk '{print $1}' | \
      cut -d '/' -f 2)
    
    # 일단 yaml파일로 다 생성해봅니다.
    dir=$(mktemp -d)
    for cf in $configmaps; do
      kubectl --server=https://java-cd:6443 -n kube-system get cm $cf -o yaml > $dir/$cf.yaml
    done
    
    # 어떤 친구들을 수정해야 하는지 확인합니다.
    grep -Hn $dir/* -e $oldip
    
    # 수정. 여기에 해당되는 친구들은 apiserver와 etcd-server 입니다.(물론 Case by case)
    # 참고로 전 수정안함
    kubectl --server=https://java-cd:6443 -n kube-system edit cm kubeadm-config
    kubectl --server=https://java-cd:6443 -n kube-system edit cm kube-proxy ( server가 외부 ip로 되어있음 괜찮은가?)

     

    6. 이전 단계에서 이전 아이피를 가진 친구들의 인증서를 삭제 후 재발급합니다.

    # kubeadmin init phase certs {해당 어플리케이션명}
    rm apiserver.crt apiserver.key
    kubeadm init phase certs apiserver
    
    rm etcd/peer.crt etcd/peer.key
    kubeadm init phase certs etcd-peer
    
    rm etcd/server.crt etcd/server.key
    kubeadm init phase certs etcd-server

    7. 자 kubelet과 docker를 리스타트하여 변경사항을 반영해봅시다. 처음엔 error가 한참 나겠지만 곧 복구를 하니 당황하지 말고 기다리시면 됩니다!

    sudo systemctl restart kubelet
    sudo systemctl restart docker

    8. 새로운 admin.conf를 내 계정으로 이동합니다.

    sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

    9. 마지막으로 kube-public namespace에 있는 configmap중 cluster-info에서 아이피를 새로운 아이피로 수정하면 됩니다.

     

    10. calico 재설치

     

    11. node 1, node 2 join 실행

     

    12. jenkins config파일 update

     

    13. jenkins 인증쪽 변경

     

    14. nexus 설정시  해당 설정도 변경

     

    참고 블로그


    반응형

    'Web' 카테고리의 다른 글

    [kubernetes] 인증서 갱신 쉽게 하는 방법  (2) 2022.02.11
    [Maven] package install차이점  (0) 2021.11.29
    [css] css 모음  (0) 2020.12.07
    [vscode] 저장시 자동정렬 설정, prettier플러그인  (5) 2020.07.11
    [프로젝트 환경설정]  (0) 2019.08.09

    댓글

Designed by Tistory.