월루를 꿈꾸는 대학생
KNAS 3주차_1 본문
실습 환경
k8s-rtr
- 가상 라우터 올린 서버
- 192..168.10.0와 192.168.20.0대역 네트워크는 rtr을 통해서 왔다갔다 라우터와 스위치처럼!
- 네트워크 팀이 담당하는 부분
- Calico는 네트워크 장비들과 bgp로 연결해서 k8s네트워크를 사내 온프레미스 네트워크와 연결하기도 함
k8s-w0
- 클러스터 내에서 혼자 192.168.20.0 대역
Calico 소개
- 데이터베이스가 상단에 있고 각 노드당 칼리코 노드들이 동작함
** 구성 요소
1) Felix
- 인터페이스 관리 , 라우팅 정보 관리 , acl관리 , 상태 체크
2) Bird
- BGP Peer에 라우팅 정보 전파 및 수신
- BGP RR(Router Reflector)
3) Confd
- calico global 설정과 BGP설정 변경시 BIRD에 적용
4) Datastore plugin
- calico 설정 정보 저장하는 곳
- k8s api datastore 주로 사용
5) Calico IPAM plugin
- 클러스터 내에서 파드에 할당할 ip대역
- 자체 ip관리 모듈 ipam이 있기에 원하는 ns에 원하는 ip대역 할당이 가능
6)calicoctl
- calico 오브젝트를 CURD가능
- datastore 접근 가능
- BGP로 각 노드에 할당된 파드 대역을 전파함
- k8s서버 말고도 온프레미스 단의 라우터 장비와 연동이가능 cf_ flannel은 자기들끼리 vxlan 정보 연동했었음
- BIRD(오픈 소스 라우팅 데몬 프로그램) 로 각 노드의 파드 정보가 전달됨
- BIRD에서 받은 정보를 Felix가 라우팅 테이블이나 iptable 수정함
-- 확인 --
# calico 파드가 각 노드들 사이에 작동 중
# host 네트워크 모드로 동작
# 칼리코 컨트롤러 동작중
# 172.16.0.0/16 대역이 전체 파드들에게 줄 수 있는 네트워크 대역
# 각 노드들이 줄 수 있는 ip대역
# 전체 ip pool에서 노드들이 쪼개서 사용
# 대역이 위의 대역일지 172.16.0-3.0 대역일지
calico부터는 flannel과 비교했을 때 기능이 상당히 많음
별도 파드ip 관리할 수 있는 ipam이 있음
대다수 cni는 별도의 ip관리 시스템이 있으니까 해당 ip대역을 사용한다
172.16.0-3.0 대역은 사용하지 않는다!
# 칼리코의 네트워크 모드 정보 확인
# 사용하는 네트워크 대역
# 서비스가 사용하는대역 10.96.0.0
# 클러스터가 사용하는 대역 172.16.0.0
** 대부분 cni는 자체의 ip 할당 기능이 존재하고 이를 통해서 유연하게 파드에 ip할당이 가능하다 **
#ps axf
# bird가 각 노드들이 가지는 파드 네트워크 정보를 bgp를 통해 송수신
# felix가 bird로부터 수신받은 내용을 iptable, routing table을 변경
# confd 실제 변경된 설정값을 트리거를 만들어 적용 시킴
파드 - 파드간 통신
- 실습 환경
- 파드 생성 전 기본 정보 확인
# 터널 ipip가 존재
# 네트워크 네임스페이스는 1개 존재
# 각 패킷들을 노드들의 ip로 보내는 라우팅 테이블 확인
# bird라는 것에 의해서 동적 학습됨
# balckhole은 루핑 방지용
# 현재 존재하는 룰 갯수
-파드 배포
# 2개의 파드를 w1에 배포
#배포된 파드와 해당 파드의 호스트의 veth 인터페이스 및 ip 확인 가능
# 파드 2개를 생성하니 filter 규칙이 39->91개로 늘어남
# 파드에 붙어있는 veth가 생성됨을 확인
# 네임스페이스 추가됨
# 라우팅 테이블에 추가됨
# shell로 파드에 접속 후 ip정보 확인 172.168.158.1
# 라우팅 테이블에 자기 ip 외에 것이 있다면 169.254.1.1 로 보내라는 의미
#파드1과 파드2 통신 확인
#서로 통신을 하기 위해서는 상대방의 arp 정보 학습이 필요
# calico는 중간에 proxy arp가 대신 arp 정보를 받아서 각 파드들에게 알려줌
#cali-Forward를 통해서 통신이 된다
#같은 노드 내에서 다른 파드끼리 통신은 host network namespace를 지나기 때문에 iptable 규칙에 의해서 통신이 컨트롤 됨
파드 -> 외부 통신
# 노드의 외부 인터넷 통신시 masquerade사용
#외부 통신 시 패킷수가 증가
다른 노드 간 파드의 통신
# 실습 환경
# 지금까지 안 썼던 터널로 통신됨
# outer header에 터널ip 붙여서 보냄
- 다른 노드 환경에서 파드 간 통신시에 IPIP터널 모드를 통해서 이뤄짐
- 각 노드 파드의 네트워크 대역은 bird로 BGP광고 송수신하고 Felix로 라우팅 테이블 및 iptables 규칙을 수정함
- 다른 노드간 파드 통신의 경우 tunl0 인터페이스를 사용 -> header에 tunl0정보 추가
# pod 1에서 ping 할 경우 터널을 통해서 통신이 됨
# tcpdump로 ip확인 시 outer와 inner ip 확인 가능
'Server&Network > Kubernets_Dokcer' 카테고리의 다른 글
쿠버네티스 대시보드 삽질기 (0) | 2022.02.06 |
---|---|
KNAS 3주차 _ 2 (0) | 2022.02.03 |
KANS 2주차_2 PAUSE (0) | 2022.01.20 |
KNAS 2주차_1 Flannel (0) | 2022.01.20 |
k8s 대쉬보드 및 nginx 실행 (0) | 2021.08.25 |