Django가 고장날때까지

네트워크 스터디 3주차 본문

k8s

네트워크 스터디 3주차

Django가 고장날때까지 2024. 9. 15. 12:18
반응형

 

 

<지식의 흐름 + 회고>

 

flannel에 이어서 이번에는 calico cni에 대해서 살펴봤다. 어떤 차이점이 있는지 살펴봤고, overlay 네트워크를 왜 사용하고, aws랑 azure가 어떻게 다른 부분이 있는지도 알게되고, 2주차와 비교했을때는 크게 달라지는 내용은 없었지만, 세부적인 디테일이나, 네트워크 지식들이 더 필요해져서. 한번 놓치면 힘들겠다라는 생각이 들었다. 

강의 영상만 총 2번씩 봤다..... ㅜㅜ 조금 더 효율적으로 정리하는 법을 연구해야겠다 ㅜㅜ

 

 

 

스터디 실습과정에서 알게된 개념

 

라우팅 Logest Match Rule

 

 

Blackhole

 

 

 

Link Local 주소

 

https://backendbrew.com/ko/docs/internet/link-local

 

# 169.254.1.1  # link local 대역 L3 장비를 넘어가면 해당정보를 가져올 수 없음 보안적으로 안전한 정보 사용하기 위해 사용

 

https://en.wikipedia.org/wiki/Link-local_address

 

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/instance-identity-documents.html

 

Amazon EC2 인스턴스의 인스턴스 자격 증명 문서 - Amazon Elastic Compute Cloud

Amazon EC2 인스턴스의 인스턴스 자격 증명 문서 시작하는 각 인스턴스에는 인스턴스 자체에 대한 정보를 제공하는 인스턴스 자격 증명 문서가 있습니다. 인스턴스 자격 증명 문서를 사용하여 인

docs.aws.amazon.com

 

 

 

 

 

 

기본적인 정보 확인

 

 

 

calico 설치하기 전

 

 

기본 크기는 16인데 24로 변경

 

calico 설치하고 나서 binary 폴더에 calico, clico-ipam 생긴것 확인

calico interface 생긴것 확인

calico 설치후 iptable 규칙 갯수 확인
calicoctl 정보 확인

172.16.116.1 - corednsXXXXXXX

172.16.116.2 - calico-kube-controllers-XXXXXX

172.16.116.3- corednsXXXXXXX

 

kube-ops-view로 확인

 

 

 

 

=========기본적인 실습 준비 과정 스샷============

 

Calico 가 무엇인가?  

 

 

 

 

Calico는 자체 IPAM을 사용함

각각의 Node가 poddp

 

172.16.158.0/24로 통신할려면 192.168.10.101로가 bird가 알려줌

 

host-local의 대역은 있으나 자체 IPAM을 제공하나, 

calico의 IPAM을 우선해서 사용한다.

host-ipam이 아니라 calico-ipam을 우선해서 사용하겠다.

자기자신을 제외한 node들의 정보

 

쉽게 생각하면 node ( BGP Router - 그 역할 bird가 한다.)

햔재 node 동작
calico node의 정보, ippool을 두고 사용하고 있다.

 

kubeadm 할때 사용한 정보 다시 확인

 

 

calicoctl get wep -A  # 자주 사용하는 명령어, 

프로세스 정보, bird, confd, felix 

 

felix가 iptable 관리해줌  # cali라는 룰이 생김

cali라는 룰이 생김

 

 

 

 

 

 

======================================================================================

2. 파드(Pod) <> 파드(Pod)간 통신

 

실습목표 및 내용

 

 

호스트 네트워크 네임스페이스를 파드빼고, k8s-w1에 아무런 파드가 없는 상태에서 진행

터널 인터페이스가 1개 되어 있음 -> 그게 빨간색으로 표시한 부분

네트워크 네임스페이스가 없다.  파드가 아무것도 없으니까 (w1)

bird가 BGP 라우팅 프로토콜에 의해 서로 교환한 정보고, felix가 넣어주고, blackhole은 w1 자신을 가리킴

이거 없으면 라우팅 loop 발생할 수 있음

라우팅 정보 확인 - > tunl0 인터페이스 통해 나가라.

 

w1에 pod2개를 배포함

172.16.158.1, 172.16.158.2   # pod ip를 할당해줌

 

 

cali 인터페이스 매핑해줌

파드가 2개 만들어지니 네트워크 네임스페이스가 없었는데 생성됨 # pause 컨테이너 만들어줌

 

 

파드에서 파드 통신할떄 라우팅 테이블 172.16.158.1 -> calice0906292e2 거쳐서 통신 # 반대의 경우도 마찬가지

 

 

늘어난 iptable 룰 수

 

 

pod1에 직접 들어가서 자세히 살펴보자

 

 

pod2에 들어가서 살펴보자.

 

 

이 proxy_arp 값이 반드시 1로 셋팅되어 있어야한다.

 

 

 

ㅜㅜ 스샷이 없어져서 ㅜㅜ 우선 강의 영상 차용 MAC 주소 알려줘서 통신하고, ARP 먼저 -> ICMP 동작 

 

1. prox_arp

2. 32bit

3. 169.254.1.1  # link local 대역 L3 장비를 넘어가면 해당정보를 가져올 수 없음 보안적으로 안전한 정보 사용하기 위해 사용

 

==================================================================================

2. 파드 -> 외부(인터넷)통신

 

 

실습목표: 외부 통신할 때 NAT 통해서 MASQUERADE 되고, tunnel 인터페이스 거치지 않는 지 확인 하기

 

 

 

 

 

NAT가 true로 되어 있을때

cali-nat-outoging 룰로 지정

 

Member 안에 속하는 대역대가 아니면 -> masquerade 해서 NAT 통해서 나가라

 

watch로 걸어둠

veth1 인터페이스

 

 

a) MASQUERADE 쪽에 pkts 1로 증가 확인

b) pod ip가 8.8.8.8 로 갔다. tcpdump에서 확인가능

 

위에서 한 것은 핑크색(veth1)으로 색칠한 부분에 tcpdump 수행

 

 

 

외부 통신은 여기에 tunl0에 잡히지 않는다.

 

 

tcpdump를 ens5에서 잡을 경우 잡힌다.

 

도메인도 외부 통신 가능하고

 

 

tcpdump ens5로 잡았을때 

 

192.168.10.101로 나온다.

 

pod(172.16.158.3)에서 8.8.8.8 로 갔다가

들어오는 source ip가  192.168.10.101 

 

pod(172.16.158.3)에서 8.8.8.8 로 갔다가

들어오는 source ip가  192.168.10.101 라서

 

 

NAT FALSE 로 만들어서 외부 통신 안하게 하는 방법도 있음

 

 

 

NAT False로 변경함

 

 

cali-nat-outgoing 안에 룰이 사라짐

 

==================================================

 

4. 다른 노드에서 파드 <> 파드 간 통신

 

flannel cni - vxlan / calico는 ipip 를 사용 (overlay) 목적은 동일

 

실습 목표: 다른 노드에서의 파드간 통신이 어떻게 되는지? 

 

 

워커 노드 1번, 2번 기본정보 확인함

 

 

AWS는 기본적으로 9091에서 20바이트 (IPIP 헤더)빼면

 

 

 

 

 

각각의 워커 노드에 파드 생성

라우터 정보에 calice 네트워크 정보가 추가됨

 

이 개념이 핵심  

 

 

모니터링

pod 1 -> pod2 통신  # pod 2에서 tcpdump - tun0잡고 있음

 

동그라미를 친곳에서는 다 잡히겠지만, 핑크색과 연두색에서 다르게 잡아야함.

 

 

proto 4 (IPIP 프로토콜을 의미)

 

 

핑크색라인은 outer 헤더 정보, 노란색은 inner 헤더 정보 

 

 

 

패킷 덤프 뜸

패킷 덤프 뜨고, 직접까봄

 

 

 

4. Calico 네트워크 모드 중 Direct 모드에 대해서 알아보자

 

 

pod ip가 그대로 나간다.


https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#change_source_dest_check

Source/Detination Check 기능을 반드시 disable(=stop) 해야지 가능함

 

해당 자겁을 통해서 ipipMode를 Never로 만들연 -> IPIP overlay 모드 안쓰겠다는 소리

tun0 -> esn5로 일괄 변경됨

esn5로만 통신 가능함

 

 

파드 3개를 띄우고, 어떤 문제가 있는지 살펴보자

파드의 ip가 직접빠져 나감

 

(강의 영상)

 

(실습)

 

다른 대역대인 w0에 들어가서 확인하면, w1 에서 빠져 나가는 건 있으나 w0으로 들어오는게 없음 # 문제가 발생

대역대가 다름

핑크색은 AWS가 가지고 있는 virtual router라고 생각

 

AWS virtual router에 pod의 172.16.XXX.XXX (파드 대역대 정보가 없음)

 

수동으로 라우터 정보 넣어주면 통신 가능함

 

 

그래서!!!!!!!!!!!!!! overlay 네트워크 나온이유 - 개발자가 애플리케이션만가지고 네트워크팀 협조 안받고 개발할려고

 

 

 

4. 네트워크 모드 중 CrossSubnet 모드: 나랑 같은 ip 대역대에있는 워커노드끼리는 파드 ip가 그냥 빠져나가고(es5) , 다른 대역대는 (tunl0) 이용

 

 

 

BGP 는 실습할수 있는 환경은 아니지만 살펴보기

 



https://www.tigera.io/blog/why-bgp/

 

 

========================

 

Z. 마지막 네트워크 모드 중 패킷 암호화

 

 

장점: 이동 중에도 연결이 끊기지 않음

엔드 포인트를 지정하고, private key 활용해서 public key 4개 생성

 

 

https://docs.tigera.io/calico/latest/networking/configuring/mtu#determine-mtu-size

 

Configure MTU to maximize network performance | Calico Documentation

Optimize network performance for workloads by configuring the MTU in Calico to best suit your underlying network.

docs.tigera.io

 

 

 

 

 

 

"peer" 값은 공개 키를 base64로 인코딩한 해시 값. 이것은 일반적인 사용자 이름이나 ID가 아니라, WireGuard에서 각 피어를 식별하기 위해 사용하는 공개 키. 각 피어는 고유한 공개 키를 가지고 있으며, 이를 통해 서로 간의 안전한 통신을 보장

 

이렇기 때문에 이동중에 연결이 끊어져도 가능함

 

노드 2 로

출발지 목적지 ip만 나오고 UDP 로 나옴.

 

진짜 암호화 된건지 살펴보자

패킷 암호화 여부 확인

 

 

프로메테우스 셋팅

 

그라파나로 모니터링 툴 셋팅

 

 

 

반응형

'k8s' 카테고리의 다른 글

네트워크 스터디 5주차  (2) 2024.10.06
네트워크 스터디 4주차  (2) 2024.09.29
정리  (0) 2024.09.23
네트워크 스터디 2주차 - Pause Container 와 k8s CNI(Flannel)  (2) 2024.09.01
네트워크 스터디 1주차  (5) 2024.08.28
Comments