증상 발생

  • 우분투 업그레이드를 진행하였는데 업그레이드 진행한 이후 쉘 접속이 끊기는 문제가 발생하였습니다. 업그레이드는 다음과 같은 명령어를 사용하여 진행하였습니다.
# 배포 패키지 업그레이드 
sudo apt update 
sudo apt upgrade
sudo apt dist-upgrade

# 리눅스 릴리즈 업그레이드
sudo apt install update-manager-core
sudo do-release-upgrade
  • 서버에 직접 모니터를 물려서 확인해보니 물리 네트워크 인터페이스가 인식이 되지 않는 것이 문제였습니다. 해당 문제는 아래 명령어를 통해 확인하였습니다.

    ifconfig -a | grep eth0 
    # 결과값이 출력되나 IPv4 가 할당되지 않음. (평소였다면 할당되었어야 함)
    

결과값이 출력되지 않음.

  • 이후 구글링을 통해 원인을 찾았습니다.

apparmor.d 가 문제.

  • 업그레이드 직후 apparmor.d 가 문제였습니다. (그렇다고 기본 네트워크를 아예 못쓰게만드냐...)

  • 확인해보니 apparmor 는 SELinux 와 유사한 리눅스 보안 모듈이라 합니다.

해결

  • apparmor.d 정책 중 dhclient 에 대한 것을 비활성화하였습니다.

    # apparmor.d 를 비활성화
    sudo ln -s /etc/apparmor.d/sbin.dhclient /etc/apparmor.d/disable/  
    sudo /etc/init.d/apparmor reload
  • apparmor 에서 특정 정책 complain 모드로 변경하여 해결할 수도 있습니다. 여기서 complain 모드란 정책을 제한하진 않되, 로그로만 기록해 두는 모드입니다.

     sudo aa-complain /usr/sbin/dhclient
  • 아래는 비활성화 명령어 History 를 캡쳐한 부분입니다.

이으며..

  • 이 방법은 완전한 해결 방법이 아닌데다가, aa-status 명령어를 치면 나오는 모든 모듈들의 정책이 어긋나서 나온 문제로 보입니다. 해당 모듈들에 대해서 정상적인지 테스트를 해야할 듯합니다.
  • 임시로 문제가 발생하는 모듈에 대해서 aa-complain /usr/sbin/tcpdum 등의 명령어로 풀어갈 생각입니다.
  • 룰을 계속 추가하면서 사용하려니 너무 번거로워 지금은 apparmor.d 를 사용안하도록 변경하여 사용하고 있습니다. (내부망에서만 사용하는 서버니까..)

저같은 경우 마크다운으로 글을 올릴 때는 https://marxi.co/ 를 사용하여 마크다운으로 작성하여 글을 올렸었습니다.

하지만 최근에는 티스토리 자체 에디터에서 마크 다운을 지원하고 있습니다.


마크다운 그림 삽입 테스트입니다.

마크다운 테스트 글입니다.

  • Swap 제거 (Master, Worker 공통. 안해주면 kubeadm init 때 오류 발생)

    sudo su -
    
    swapoff -a
    vi /etc/fstab
    # swap에 해당하는 영역을 #로 커맨트
    #UUID=696444df-416c-4846-861e-ea4bb1f66ed0 none            swap    sw              0       0
  • Master 노드에서 아래 명령어를 통해 kubernetes 를 실행한다.

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    #--pod-network-cidr 옵션은 flannel 을 플러그인으로 사용할 경우 필수라고 한다.
    
    # 아래 join 명령어를 그대로 복사해서 slave 에 그대로 친다.
    #  kubeadm join 211.45.109.210:6443 --token ozlx17.7uwfzw2s8candagq --discovery-token-ca-cert-hash sha256:0366346c108a810cd509b5d9d46903f1247f3d34becad31c905a94967ca5477f
    
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    export KUBECONFIG=$HOME/.kube/config
    export KUBECONFIG=$HOME/.kube/config | tee -a ~/.bashrc
    
    # ~~플러그인 설치 여기서는 수많은 network 플러그인 중 weave net 설치함~~ -> 내부 domain 을 못찾는 이슈가 생김.
    #kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    #출처>https://www.weave.works/docs/net/latest/kubernetes/kube-addon/
    
    # 아래는 flannel 설치 방법
    # 이것 사용
    kubectl -n kube-system apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # 도메인 미인식 오류.... kubectl -n kube-system apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
    #yaml 파일> https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
    
  • Worker 노드에서 아래 명령어를 실행한다.

    #마스터의 kubeadm init 결과로 나온 join 명령을 그대로 복사하여 붙여넣는다.
    kubeadm join 211.45.109.210:6443 --token *************** --discovery-token-ca-cert-hash sha256:****************

'잡담' 카테고리의 다른 글

각 언어들의 Shared mutable state 에 대처하는 방법  (0) 2020.01.21


카카오 오픈빌더 가이드 링크 및 방화벽 정책

이문서는 https://marxi.co/ 에서 만들어졌습니다.
%23%23%20%uCE74%uCE74%uC624%20%uC624%uD508%uBE4C%uB354%20%uAC00%uC774%uB4DC%20%uB9C1%uD06C%20%uBC0F%20%uBC29%uD654%uBCBD%20%uC815%uCC45%0A%0A%3E%20%uC774%uBB38%uC11C%uB294%20https%3A//marxi.co/%20%uC5D0%uC11C%20%uB9CC%uB4E4%uC5B4%uC84C%uC2B5%uB2C8%uB2E4.%0A%0A*%20%uC2A4%uD0AC%20%uB4F1%uB85D%uBC95%0A%3E%20https%3A//i.kakao.com/docs/skill-build%23%25EC%258A%25A4%25ED%2582%25AC-%25EC%2588%2598%25EC%25A0%2595%0A%0A*%20%uBE14%uB85D%20+%20%uC2A4%uD0AC%20%20%28%uC548%uC368%uB3C4%20%uB428%20%uAE30%uBCF8%uC2A4%uD0AC%uB85C%20%uB4F1%uB85D%uD574%uC11C..%29%0A%3E%20https%3A//i.kakao.com/docs/skill-block%23%25EB%25B8%2594%25EB%25A1%259D%25EA%25B3%25BC-%25EC%258A%25A4%25ED%2582%25AC-%25EC%2597%25B0%25EA%25B2%25B0%25ED%2595%2598%25EA%25B8%25B0%0A%0A*%20%uC2A4%uD0AC%20API%0A%3E%20https%3A//i.kakao.com/docs/skill-response-format%23%25EC%2598%2588%25EC%25A0%259C-%25EC%25BD%2594%25EB%2593%259C-6%0A%0A*%20%uAE30%uBCF8%20%uC815%uCC45%uC774%20deny%20%uC77C%20%uACBD%uC6B0%20%uD5C8%uC6A9%uD574%uC57C%20%uD558%uB294%20%uBC29%uD654%uBCBD%20IP%20%28inbound%20%uC815%uCC45%29%0A%3E%20219.249.231.40%7E42%20%20%28%uC790%uCCB4%20%uD14C%uC2A4%uD2B8%20%uC11C%uBC84%uB85C%20%uAC80%uC99D%uD558%uC5EC%20%uD655%uC778%uD55C%20%uAC83%uC774%uB77C%20%uC5B8%uC81C%uB4E0%20%uBC14%uB014%20%uC218%20%uC788%uC2B5%uB2C8%uB2E4.%29


 폐쇄망에서 White box로 특정 IP만 허용해야했기에, 위 IP 주소를 직접 체크하였습니다.

 https://i.kakao.com/docs/ 에서 챗봇 사용 방법을 찾아보시면 됩니다.

 기존에 외부 API 형태로 플러스친구 챗봇을 제공하셧던 분이라면 스킬을 통하여 동일하게 구현이 가능하며,
저같은 경우는 편법이지만 폴백 블록에 등록된 시나리오와 스킬을 연결하여 이전 플러스친구 챗봇과 동일하게 구현하였습니다.




+ Recent posts