월루를 꿈꾸는 대학생

KNAS 3주차_1 본문

Server&Network/Kubernets_Dokcer

KNAS 3주차_1

하즈시 2022. 2. 2. 11:10
728x90

실습 환경 

 

k8s-rtr

- 가상 라우터 올린 서버

- 192..168.10.0와 192.168.20.0대역 네트워크는  rtr을 통해서 왔다갔다 라우터와 스위치처럼! 

- 네트워크 팀이 담당하는 부분 

- Calico는 네트워크 장비들과 bgp로 연결해서 k8s네트워크를 사내 온프레미스 네트워크와 연결하기도 함 

 

k8s-w0

- 클러스터 내에서 혼자 192.168.20.0 대역 

 


Calico 소개 

 

https://docs.projectcalico.org/reference/architecture/overview

 

- 데이터베이스가 상단에 있고  각 노드당 칼리코 노드들이 동작함 

 

** 구성 요소 

 

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 확인 가능 

 

 

728x90

'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