LXC 에 K3s 설치해서 이것저것 공부해보려고 하는데, 외부 연결 질문입니다.
Lxc(ubuntu)로 인스턴스 하나 만들고 K3s 설치를 했습니다. 이후 kubectl 로 로컬에서 명령을 내리는데에는 문제는 없는데, kubeconfig.yml 파일을 만들어서 다른 장비에서 접속을 하려고 하면 접속이 안됩니다. 바로 연결을 끊어버리네요.
무엇이 문제인지 곰곰히 생각해봤는데, Lxc 의 네트워크가 2개입니다. 하나는 공유기를 통해 내부에서 통신하는 192.168.x.y/23 대역을 쓰는 것이고(초기 설치 시 설정됨), 다른 하나는 외부와 연결하기 위해 통신사 공인IP를 그대로 받아오는 것입니다. 전자의 IP로 kubeconfig.yml 에 설정하고 연결하면 잘 되지만, 이후 받은 공인IP를 넣어서 연결하면 접속이 되질 않습니다. 6443 포트로 접속이 되어야 하는 걸로 아는데, K3s 가 설치된 장비에서는 curl 로 접속이 되나, 다른 장비에서 접속하면 바로 연결이 끊어져버리거나 하는 등의 문제가 발생합니다. 흡사 방화벽이 있는 것처럼요.
가장 의심해야 할 것은 방화벽이겠으나, 혹시 K3s와 같은 Kubernetes 장비에서 방화벽이 아닌 설정을 추가로 해줘야 외부 접근이 되는게 있을까요? 사실 들어본 적이 없어서요...;;; iptables -L 로 나오는 룰이 너무 많아서 다 지우고 해보기도 좀 그렇고(K3s가 건드리는 느낌이라)...
조언 부탁드립니다.
좋은답변을 받기위해서는 좋은 질문이 필요합니다.
유의할점⚠️
- 예의를 지켜주세요. 답변자는 답변을 할 의무는 없습니다.
- 질문에 대한 대부분의 답은 검색으로 찾아보실 수 있습니다.
- 답변자가 답변을 하면서 대개 많은 경우는 다시 질문을 하는 경우가 많이 있습니다.
- (질문의 대한 정보가 부족합니다. ~일 경우 결과물이 어떻게 됩니까? 등등)
질문방법🙏
자신의 상황을 최대한 자세히 설명해주세요.
상황이 정확하고 많을 수록 답변의 정확도가 올라갑니다.
ex) ex) 헤놀로지라면 메인보드 모델 칩셋정보, CPU, 사용한 DSM 버전, 모델, 부수적인 추가 컨트롤러 나 랜카드 등과 어떠한 로더의 이미지를 사용했는지.(arpl-i18n, mshell), 어떤 버전을 사용했는지, 문제가있다면 어떠한것인지 스크린샷을 동반하고 에러의 경우 에러로그를 출력해서 주시면 좋습니다.
*가능하면 최신버전 OS/SW를 이용해주세요
답변에대한 피드백을 주세요.
정보가 질문에 모두 담겨있지않다면 대부분의 답변이 다른정보를 요구합니다.
이러한 답변에 대해 명확한 피드백을 주시면 도움이 됩니다.
그림이나.. 상하 관계를 명확히 하여 적어주실수 있나요?
eth0 는 ISP장비공인IP->공유기(라우터)사설IP(192.168.x.1/23) 으로 받아온 192.168.x.y 이고, eth1 는 ISP장비공인IP에 바로 연결된 공인IP 를 그대로 씁니다. ISP의 장비가 4포트 허브라서 각 연결마다 공인IP를 줍니다. 외부 접근도 잘되구요.
아.. lxc는 두개 인터페이스만 dhcp가 됩니다.
eth0, enp5s0..
lxc설정에서 eth1의 이름을 enp5s0로 바꿔보세요
알려진 이슈이며 해결되지 않을 이슈입니다.
참고로 고정ip는 리눅스 내에서 설정하는게 아니라, lxc 설정에서 해줘야 합니다.
흠.. 그냥 ip 자체가 할당이 안됩니다.
https://discuss.linuxcontainers.org/t/lxc-can-not-get-ip-address/17270/17
제가 예전에 lxc에다가 질문을 올린적 있는데, 공식 답변입니다..
질문 올린게 5월이니.. 그 사이에 패치하지 않은 이상 안되는게 정상입니다.
lxc 개발자 측은 인터페이스 2개 초과에 dhcp 기능을 추가할 의지가 전혀 없어보였어요..
eth1 eth2... eth9까지 안되는것도 확인 했고, enp0s0~ enp9s9 중에 랜덤하게 6개 정도 선택해서 확인 했는데요..
안됬었습니다.
지금은 확신은 안되지만,
저 때 대화 늬앙스를 보면 eth0와 enp5s0 외에는 dhcp로 ip 못받아오는게 정상일거라고 봅니다.
제가 proxmox에서 lxd를 써본적은 없지만..
lxc profile edit {lxc 이름} 에서 interface 이름 지정할 수 있습니다.
cmt alert