티스토리 뷰
안녕하세요. Kubernetes Advanced Networking Study(=KANS) 3기 모임에서 스터디한 내용을 정리했습니다. 해당 글에서는 Calico의 네트워크 모드와 네트워크 접근 통제 방법에 대해 자세히 알아보겠습니다.
Calico 는 다양한 네트워크 통신 방법(모드)를 제공합니다.
Calico 나 Cilium 에서 파드 혹은 네임스페이스의 레벨에서 IN/OUT 트래픽에 대한 통제가 가능합니다.

네트워크 모드
1. IPIP 모드
파드 간 통신이 노드와 노드 구간에서는 IPIP 인캡슐레이션을 통해서 이루어 집니다
- 다른 노드 간의 파드 통신은 tunl0 인터페이스를 통해 IP 헤더에 감싸져서 상대측 노드로 도달 후 tunl0 인터페이스에서 Outer 헤더를 제거하고 내부의 파드와 통신
- 다른 노드의 파드 대역은 BGP로 전달 받아 호스트 라우팅 테이블에 업데이트됨
- Azure 네트워크에서는 IPIP 통신이 불가능하여 IPIP 모드 대신 VXLAN 모드 사용 [참고]
# 모드 정보 확인
calicoctl get ippool -o wide
# 노드(BGP) Peer 정보 확인
calicoctl node status
IPv4 BGP status
+----------------+-------------------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+----------------+-------------------+-------+----------+-------------+
| 192.168.20.100 | node-to-node mesh | up | 10:03:45 | Established |
| 192.168.10.101 | node-to-node mesh | up | 10:05:26 | Established |
| 192.168.10.102 | node-to-node mesh | up | 10:07:16 | Established |
+----------------+-------------------+-------+----------+-------------+
# BGP 로 전달 받은 파드 네트워크 대역이 호스트 라우팅 테이블에 적용되었는지 확인
route -n | egrep '(Destination|tunl0)'
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.8.128 192.168.20.100 255.255.255.192 UG 0 0 0 tunl0
172.16.46.0 192.168.10.102 255.255.255.192 UG 0 0 0 tunl0
172.16.228.64 192.168.10.101 255.255.255.192 UG 0 0 0 tunl0
calicoctl ipam show --show-blocks
+----------+-----------------+-----------+------------+--------------+
| GROUPING | CIDR | IPS TOTAL | IPS IN USE | IPS FREE |
+----------+-----------------+-----------+------------+--------------+
| IP Pool | 172.16.0.0/16 | 65536 | 6 (0%) | 65530 (100%) |
| Block | 172.16.116.0/24 | 256 | 4 (2%) | 252 (98%) |
| Block | 172.16.158.0/24 | 256 | 1 (0%) | 255 (100%) |
| Block | 172.16.34.0/24 | 256 | 1 (0%) | 255 (100%) |
+----------+-----------------+-----------+------------+--------------+

# 워커 노드마다 할당된 dedicated subnet (podCIDR) 확인
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'
kubectl get node k8s-m -o json | jq '.spec.podCIDR'
"172.16.0.0/24"
kubectl get node k8s-w1 -o json | jq '.spec.podCIDR'
"172.16.1.0/24"
...
# 기본제공
cat /etc/cni/net.d/10-calico.conflist
...
"ipam": {
"type": "calico-ipam"
},
...
# IPAM 우선순위 - 링크 링크2
1. Kubernetes annotations
2. CNI configuration << Calico IPAM
3. IP pool node selectors << host-local IPAM
# IPIP 인캡슐레이션 동작을 수행하는 터널 인터페이스 확인
ip -c -d addr show tunl0

2. Direct 모드
파드 통신 패킷이 출발지 노드의 라우팅 정보를 보고 목적지 노드로 원본 패킷 그대로 전달합니다
3. VXLAN 모드
파드 간 통신이 노드와 노드 구간에서는 VXLAN 인캡슐레이션을 통해서 이루어 집니다(지난 글 참고 :
4. Pod 패킷 암호화 (네트워크 레벨)

Calico 의 다양한 네크워크 모드 환경 위에서 WireGuard 터널을 자동 생성 및 파드 트래픽을 암호화하여 노드간 전달합니다
- 간결한 코드 구조와 빠른 성능 (모든 것이 kernel에서 동작하고, 주요 암호 알고리즘에 대해서 병렬처리하므로써 빠른 속도를 자랑함)
- wireguard는 망 변경으로 peer의 ip 주소가 변경되더라도 tunnel이 유지되는 특징이 있음. 이것이 가능한 이유는 index 기반으로 peer hash table이 운용되기 때문
WireGuard 설정
# 설치
apt install wireguard -y
# WireGuard 버전 확인
wg version
WireGuard 설정 및 확인
# 설정
calicoctl get felixconfiguration -o yaml
calicoctl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true}}'
# 확인
calicoctl get felixconfiguration default -o yaml | grep wireguardEnabled
root@k8s-m:~/yaml# calicoctl get felixconfiguration default -o yaml | grep wireguardEnabled
wireguardEnabled: true
calicoctl get node -o yaml | grep wireguardPublicKey
calicoctl get node <노드 Name> -o yaml | grep wireguardPublicKey
root@k8s-m:~/yaml# calicoctl get node k8s-w1 -o yaml | grep wireguardPublicKey
wireguardPublicKey: BToK9bLEhMaPUJsuKy3KdrxVOpklyo0qlGRdMN6lHWc=
# wireguard.cali 인터페이스 확인
ip -c -d addr show wireguard.cali
root@k8s-w1:~# ip -c -d addr show wireguard.cali
12: wireguard.cali: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1440 qdisc noqueue state UNKNOWN group default qlen 1000
link/none promiscuity 0 minmtu 0 maxmtu 2147483552
wireguard numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
inet 172.16.228.74/32 scope global wireguard.cali
valid_lft forever preferred_lft forever
ifconfig wireguard.cali
root@k8s-w1:~# ifconfig wireguard.cali
wireguard.cali: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1440
inet 172.16.228.69 netmask 255.255.255.255 destination 172.16.228.69
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)

# wireguard.cali 설정 확인 : 통신 포트, Peer/Endpoint 정보, 패킷 암호화를 위한 공개키/사설키 정보
wg showconf wireguard.cali
root@k8s-w1:~# wg showconf wireguard.cali
[Interface]
ListenPort = 51820
FwMark = 0x100000
PrivateKey = AIgTihI2p4icwVMR4sIvuVaSqwKlkxMImQp4A/Gm+Gg=
[Peer]
PublicKey = BToK9bLEhMaPUJsuKy3KdrxVOpklyo0qlGRdMN6lHWc=
AllowedIPs = 172.16.228.64/26, 172.16.228.69/32, 172.16.228.67/32
Endpoint = 192.168.100.101:51820
[Peer]
PublicKey = 9TCD8hG6SLutZSOZSzQeqj6O0icJAxA3RPIipcBKBxs=
AllowedIPs = 172.16.197.0/26, 172.16.197.3/32, 172.16.197.5/32
Endpoint = 192.168.100.103:51820
[Peer]
PublicKey = Ercb/0pNZ+I1ELOkiXlWbZA9J0Fjt7XqsstDH4GhNmI=
AllowedIPs = 172.16.46.3/32, 172.16.46.0/26, 172.16.46.5/32
Endpoint = 192.168.100.102:51820
# Peer 의 정보(고유한 index)
wg show
interface: wireguard.cali
public key: 8TNaYyzzc1N4SHfqE+Y5b4rMBKX/lqPe0tWO/h8sOB4=
private key: (hidden)
listening port: 51820
fwmark: 0x100000
peer: 6WtZqEKSmoSKiFp20fhk/jyTcrTqf9qshyZI1HvE9Qk=
endpoint: 192.168.10.102:51820
allowed ips: 172.16.184.0/32, 172.16.184.0/24, 172.16.184.1/32
peer: +fOEOJgFxueIbrp709iB4F4gFRb2ny4lWKbxCNNfczM=
endpoint: 192.168.20.100:51820
allowed ips: 172.16.34.0/32, 172.16.34.0/24, 172.16.34.1/32
peer: d2LgXvRo4DwsyhiLXUn9TEt6D3l4pFIVlCD7KESR/m0=
endpoint: 192.168.10.101:51820
allowed ips: 172.16.158.0/32, 172.16.158.0/24, 172.16.158.1/32
# 키 정보 확인
wg show all public-key
wireguard.cali 8TNaYyzzc1N4SHfqE+Y5b4rMBKX/lqPe0tWO/h8sOB4=
wg show all private-key
wireguard.cali kJbrfATGFP2v4sl+Wqg1Gv8zwFpIXshYFFD3udMDd3k=
wg show all preshared-keys
wireguard.cali 6WtZqEKSmoSKiFp20fhk/jyTcrTqf9qshyZI1HvE9Qk= (none)
wireguard.cali +fOEOJgFxueIbrp709iB4F4gFRb2ny4lWKbxCNNfczM= (none)
wireguard.cali d2LgXvRo4DwsyhiLXUn9TEt6D3l4pFIVlCD7KESR/m0= (none)
# 그외 키타 정보
wg show all dump
wg show all endpoints
wg show all peers
wg show all transfer
wg show all persistent-keepalive
동작 확인
#파드 생성
curl -s -O https://raw.githubusercontent.com/gasida/NDKS/main/5/node3-pod3.yaml
kubectl apply -f node3-pod3.yaml
# 파드 Shell 접속(zsh)
kubectl exec -it pod1 -- zsh
## 파드 Shell 에서 아래 입력
ping <pod2 혹은 pod3 IP>
# 파드가 동작하는 노드의 eth0(예시)에서 패킷 덤프
ss -unlp
tcpdump -i <eth0> -nn udp port 51820
tcpdump -i ens5 -nn udp port 51820
혹은 아래 처럼 파일로 저장 후 해당 파일을 다운받아서 확인(wireshark 등 사용)
tcpdump -i <eth0> udp port 51820 -w /tmp/calico-wireguard.pcap
tcpdump -i ens5 udp port 51820 -w /tmp/calico-wireguard.pcap
# 현재 모든 워커 노드에 tcpdump 후 ping curl 테스트 시 모든 노드에서 트래픽이 발생한다 >> 이유는 VirtualBox 에 nic2 에 "무작위 모드 : 모두 허용" 상태여서, 모든 노드로 패킷이 전달됨
# VirtualBox 에 nic2 에 "무작위 모드 : 거부"로 설정 후 테스트 하게 되면 정확하게, 출발지와 목적지의 VM에서만 패킷이 확인된다!
모드워커노드) tcpdump -i ens5 -nn udp port 51820
패킷 덤프를 뜬 후 아래와 같이 Wireshark을 통해 WireGuard Protocol의 헤더 안쪽이 Encrypted Packet으로 나오는 것을 알 수 있습니다.

파드 삭제 및 wireguardEnabled Off
# 파드 삭제
kubectl delete -f node3-pod3.yaml
# wireguardEnabled Off
calicoctl patch felixconfiguration default --patch '{"spec":{"wireguardEnabled": false}}'
Calico 네트워크 접근 통제
네트워크 정책(Network Policy)은 쿠버네티스 클러스터 내부에서 파드 간에 통신할 경우 트래픽 룰을 규정하는 것입니다.
네트워크 정책 구성
네트워크 정책은 인그레스(Ingress 수신)과 이그레스(Egrss 송신)로 구성되어 있습니다.
설정 범위를 podSelector 로 지정합니다.
네트워크 정책은 네임스페이스별로 생성해야 합니다.
네트워크 정책 실습
실습을 위해서 Calico 설정 변경
# 현재 설정 확인
calicoctl get ippool -o wide
# calico nat true 설정
cat <<EOF | calicoctl replace -f -
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: default-ipv4-ippool
spec:
blockSize: 24
cidr: 172.16.0.0/16
ipipMode: Never
nodeSelector: all()
vxlanMode: Always
natOutgoing: true
EOF
# calico wireguard 끄기
calicoctl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":false}}'
# ipip mode 설정
kubectl apply -f https://raw.githubusercontent.com/gasida/NDKS/main/4/calico-ndks.yaml
calicoctl get ippool default-ipv4-ippool -o yaml | sed -e "s/vxlanMode: Always/vxlanMode: Never/" | calicoctl apply -f -
calicoctl get ippool default-ipv4-ippool -o yaml | sed -e "s/ipipMode: Never/ipipMode: Always/" | calicoctl apply -f -
calicoctl get ippool default-ipv4-ippool -o wide
# 변경 설정 적용을 위해서 calico 파드 삭제 후 재생성
kubectl delete pod -n kube-system -l k8s-app=calico-node
# 모든 노드에서 enp0s8 down 후 up (라우팅 테이블 갱신을 위함)
route -n && echo && ip link set enp0s8 down && sleep 1 && ip link set enp0s8 up && route -n
파드 생성 및 확인 : default ns 에 파드 2개 , nptest ns 에 파드 2개 - 각각 파드는 레이블을 지정
# 모니터링
watch -d 'calicoctl get wep -n default;echo;calicoctl get wep -n nptest'
# 생성
kubectl apply -f https://raw.githubusercontent.com/gasida/NDKS/main/5/networkpolicy-playground.yaml
# 확인
kubectl get ns
calicoctl get wep -owide
calicoctl get wep -owide -n nptest
# 네임스페이스에 레이블 지정
kubectl label ns default ns=default
kubectl label ns nptest ns=nptest
# 확인
kubectl get ns --show-labels
NAME STATUS AGE LABELS
default Active 66m kubernetes.io/metadata.name=default,ns=default
nptest Active 4m17s kubernetes.io/metadata.name=nptest,ns=nptest
...

기본 통신 확인
# 파드 정보 확인
calicoctl get wep -owide
calicoctl get wep -owide -n nptest
# 파드 IP주소를 변수에 지정
DEFAULTPOD1=$(calicoctl get workloadEndpoint | grep np1 | awk '{print $3}' | cut -d "/" -f 1)
echo $DEFAULTPOD1
DEFAULTPOD2=$(calicoctl get workloadEndpoint | grep np2 | awk '{print $3}' | cut -d "/" -f 1)
echo $DEFAULTPOD2
NPTESTPOD3=$(calicoctl get workloadEndpoint -n nptest | grep np3 | awk '{print $4}' | cut -d "/" -f 1)
echo $NPTESTPOD3
NPTESTPOD4=$(calicoctl get workloadEndpoint -n nptest | grep np4 | awk '{print $4}' | cut -d "/" -f 1)
echo $NPTESTPOD4
# 기본 접속 확인 - 파드 간 통신
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $DEFAULTPOD2
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $NPTESTPOD3
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $NPTESTPOD4
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $DEFAULTPOD2 | grep nginx!
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $NPTESTPOD3 | grep nginx!
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $NPTESTPOD4 | grep nginx!
# 기본 접속 확인 - 파드 >> 외부 통신
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 www.google.com
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 ipinfo.io/city
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 ipinfo.io/org
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 ipinfo.io/loc
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2
# (옵션) k8s-rtr >> 파드 : 단, BGP 로 광고 전파 상태
ping -i 1 -W 1 -c 1 -I 10.1.1.254 <sample-pod-np1 의 IP>
root@k8s-rtr:~# ping -i 1 -W 1 -c 1 -I 10.1.1.254 172.16.34.2
PING 172.16.34.2 (172.16.34.2) 56(84) bytes of data.
64 bytes from 172.16.34.2: icmp_seq=1 ttl=63 time=0.606 ms
curl -s --connect-timeout 2 --interface 10.1.1.254 <sample-pod-np1 의 IP> | grep nginx!
root@k8s-rtr:~# curl -s --connect-timeout 2 --interface 10.1.1.254 172.16.34.2 | grep nginx!
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
클라우드에 적합한 인바운드는 모두 차단하고, 아웃바운드는 모두 허용하는 정책을 모든 네임스페이스에 적용
cat <<EOF> cloud-networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: cloud-networkpolicy
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Ingress
- Egress
EOF
# (워커노드) 필터링 테이블의 정책을 파일로 저장 및 갯수 확인
iptables -t filter -S |grep cali- > calico-policy1.txt
iptables -t filter -S |grep cali- | wc -l
89
# 정책 생성
kubectl apply -f cloud-networkpolicy.yaml
kubectl apply -n nptest -f cloud-networkpolicy.yaml
# (워커노드) 필터링 테이블의 정책을 파일로 저장 및 변경 정보 확인
iptables -t filter -S |grep cali- > calico-policy2.txt
diff calico-policy1.txt calico-policy2.txt
iptables -t filter -S |grep cali- | wc -l
109
# 정책 확인
kubectl get netpol
kubectl describe netpol cloud-networkpolicy
Name: cloud-networkpolicy
Namespace: default
Created on: 2021-11-08 15:58:16 +0000 UTC
Labels: <none>
Annotations: <none>
Spec:
PodSelector: <none> (Allowing the specific traffic to all pods in this namespace)
Allowing ingress traffic:
<none> (Selected pods are isolated for ingress connectivity)
Allowing egress traffic:
To Port: <any> (traffic allowed to all ports)
To: <any> (traffic not restricted by destination)
Policy Types: Ingress, Egress
# 기본 접속 확인 - 파드 간 통신
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $DEFAULTPOD2
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $NPTESTPOD3
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $NPTESTPOD4
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $DEFAULTPOD2 | grep nginx!
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $NPTESTPOD3 | grep nginx!
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $NPTESTPOD4 | grep nginx!
# 기본 접속 확인 - 파드 >> 외부 통신
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 www.google.com
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 ipinfo.io/city
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 ipinfo.io/org
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 ipinfo.io/loc
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 ipinfo.io
# (옵션) k8s-rtr >> 파드 : 단, BGP 로 광고 전파 상태
ping -i 1 -W 1 -c 1 -I 10.1.1.254 <sample-pod-np1 의 IP>
curl -s --connect-timeout 2 --interface 10.1.1.254 <sample-pod-np1 의 IP> | grep nginx!
Calico 자체 제공 추가 기능 : GlobalNetworkPolicy (GNP) → 개별 네임스페이스 마다 설정할 필요 없이 모든 네임스페이스에 정책 적용 (옵션: 중요 네임스페이스는 예외 처리)
정책 예)
1) 특정 레이블을 가진 파드에서 들어오는 통신을 허가
cat <<EOF> sample-podselector-ingress-networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: sample-podselector-ingress-networkpolicy
spec:
podSelector:
matchLabels:
app: np2
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: np1
ports:
- protocol: TCP
port: 80
EOF
# 정책 생성
kubectl apply -f sample-podselector-ingress-networkpolicy.yaml
# 정책 확인
kubectl get netpol
NAME POD-SELECTOR AGE
cloud-networkpolicy <none> 48m
sample-podselector-ingress-networkpolicy app=np2 13s
kubectl describe netpol cloud-networkpolicy
Name: sample-podselector-ingress-networkpolicy
Namespace: default
Created on: 2021-11-08 16:46:51 +0000 UTC
Labels: <none>
Annotations: <none>
Spec:
PodSelector: app=np2
Allowing ingress traffic:
To Port: 80/TCP
From:
PodSelector: app=np1
Not affecting egress traffic
Policy Types: Ingress
# 기본 접속 확인 - 파드 간 통신 : sample-pod-np1 >> sample-pod-np2 로 TCP 80 만 허용!
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $DEFAULTPOD2 | grep nginx!
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $DEFAULTPOD2
2) 특정 네임스페이스에서 들어오는 통신을 허가
cat <<EOF> sample-namespaceselector-ingress-networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: sample-namespaceselector-ingress-networkpolicy
namespace: nptest
spec:
podSelector:
matchLabels:
app: np3
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
ns: default
ports:
- protocol: TCP
port: 80
EOF
# 정책 생성
kubectl apply -f sample-namespaceselector-ingress-networkpolicy.yaml
# 정책 확인
kubectl get netpol -n nptest
NAME POD-SELECTOR AGE
cloud-networkpolicy <none> 46m
sample-namespaceselector-ingress-networkpolicy app=np3 2m2s
kubectl describe netpol -n nptest sample-namespaceselector-ingress-networkpolicy
Name: sample-namespaceselector-ingress-networkpolicy
Namespace: nptest
Created on: 2021-11-08 16:52:19 +0000 UTC
Labels: <none>
Annotations: <none>
Spec:
PodSelector: app=np3
Allowing ingress traffic:
To Port: 80/TCP
From:
NamespaceSelector: ns=default
Not affecting egress traffic
Policy Types: Ingress
# 기본 접속 확인 - 파드 간 통신 : sample-pod-np1 >> sample-pod-np3 로 TCP 80 만 허용!
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $NPTESTPOD3 | grep nginx!
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $NPTESTPOD3
3) 특정 IP 블록에서 들어오는 통신을 허가
cat <<EOF> sample-ipblock-ingress-networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: sample-ipblock-ingress-networkpolicy
namespace: nptest
spec:
podSelector:
matchLabels:
app: np4
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: $DEFAULTPOD1/32
ports:
- protocol: TCP
port: 80
EOF
# 정책 생성
kubectl apply -f sample-ipblock-ingress-networkpolicy.yaml
# 정책 확인
kubectl get netpol -n nptest
NAME POD-SELECTOR AGE
cloud-networkpolicy <none> 50m
sample-ipblock-ingress-networkpolicy app=np4 1s
sample-namespaceselector-ingress-networkpolicy app=np3 6m52s
kubectl describe netpol -n nptest sample-ipblock-ingress-networkpolicy
Name: sample-ipblock-ingress-networkpolicy
Namespace: nptest
Created on: 2021-11-08 16:59:10 +0000 UTC
Labels: <none>
Annotations: <none>
Spec:
PodSelector: app=np4
Allowing ingress traffic:
To Port: 80/TCP
From:
IPBlock:
CIDR: 172.16.34.2/32
Except:
Not affecting egress traffic
Policy Types: Ingress
# 기본 접속 확인 - 파드 간 통신 : sample-pod-np1($DEFAULTPOD1, 172.16.34.2/32) >> sample-pod-np4 로 TCP 80 만 허용!
kubectl exec -it sample-pod-np1 -- curl -s --connect-timeout 2 $NPTESTPOD4 | grep nginx!
kubectl exec -it sample-pod-np1 -- ping -i 1 -W 1 -c 1 $NPTESTPOD4
실습 환경 삭제
# CloudFormation 스택 삭제
aws cloudformation delete-stack --stack-name mylab
# [모니터링] CloudFormation 스택 상태 : 삭제 확인
while true; do
date
AWS_PAGER="" aws cloudformation list-stacks \
--stack-status-filter CREATE_IN_PROGRESS CREATE_COMPLETE CREATE_FAILED DELETE_IN_PROGRESS DELETE_FAILED \
--query "StackSummaries[*].{StackName:StackName, StackStatus:StackStatus}" \
--output table
sleep 1
done
참고
WG VPN 해부 - 링크 & 개발 계획서 - 링크 & 데브시스터즈 WG 로 VPN 서버 구축하기 - 링크1 링크2 & WG 대시보드 - 링크 & Kilo MultiCloud K8S Network -링크
Calico Policy - Stars policy demo - 링크 링크2
'IT > Container&k8s' 카테고리의 다른 글
K8S Service : NodePort (1) | 2024.09.29 |
---|---|
K8S Service : ClusterIP (1) | 2024.09.28 |
Calico 기본 통신(다른 노드에서 Pod - Pod 간) (1) | 2024.09.22 |
Calico 기본 통신(Pod - 외부(인터넷) 통신) (1) | 2024.09.22 |
Calico 기본 통신(동일 노드에서 Pod - Pod 간) (1) | 2024.09.22 |
- Total
- Today
- Yesterday
- PYTHON
- 도서
- GKE
- autoscaling
- 혼공파
- NFT
- gcp serverless
- AI
- OS
- 파이썬
- k8s
- NW
- controltower
- 혼공단
- AWS
- S3
- SDWAN
- 혼공챌린지
- k8s calico
- terraform
- GCP
- cni
- IaC
- EKS
- cloud
- operator
- VPN
- handson
- k8s cni
- security
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |