Test networking
In this lab we will test the Calico cluster to demonstrate networking is working correctly.
Pod to pod pings
Create three busybox instances
kubectl create deployment pingtest --image=busybox --replicas=3 -- sleep infinity
Check their IP addresses
kubectl get pods --selector=app=pingtest --output=wide
Result
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pingtest-b4b6f8cf-b5z78 1/1 Running 0 3m28s 192.168.38.128 ip-172-31-37-123 <none> <none>
pingtest-b4b6f8cf-jmzq6 1/1 Running 0 3m28s 192.168.45.193 ip-172-31-40-217 <none> <none>
pingtest-b4b6f8cf-rn9nm 1/1 Running 0 3m28s 192.168.60.64 ip-172-31-45-29 <none> <none>
Note the IP addresses of the second two pods, then exec into the first one. For example
kubectl exec -ti pingtest-b4b6f8cf-b5z78 -- sh
From inside the pod, ping the other two pod IP addresses. For example
ping 192.168.45.193 -c 4
Result
PING 192.168.45.193 (192.168.45.193): 56 data bytes
64 bytes from 192.168.45.193: seq=0 ttl=62 time=1.847 ms
64 bytes from 192.168.45.193: seq=1 ttl=62 time=0.684 ms
64 bytes from 192.168.45.193: seq=2 ttl=62 time=0.488 ms
64 bytes from 192.168.45.193: seq=3 ttl=62 time=0.442 ms
--- 192.168.45.193 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.442/0.865/1.847 ms
Check routes
From one of the nodes, verify that routes exist to each of the pingtest
pods’ IP addresses. For example
ip route get 192.168.38.128
Result
192.168.38.128 via 172.31.37.123 dev eth0 src 172.31.42.47 uid 1000
cache
The via 172.31.37.123
in this example indicates the next-hop for this pod IP, which matches the IP address of the node the pod is scheduled on, as expected.
IPAM allocations from different pools
Recall that we created two IP pools, but left one disabled.
calicoctl get ippools -o wide
Result
NAME CIDR NAT IPIPMODE VXLANMODE DISABLED SELECTOR
pool1 192.168.0.0/18 true Never Never false all()
pool2 192.168.192.0/19 true Never Never true all()
Enable the second pool.
calicoctl apply -f - <<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: pool2
spec:
cidr: 192.168.192.0/19
ipipMode: Never
natOutgoing: true
disabled: false
nodeSelector: all()
EOF
Create a pod, explicitly requesting an address from pool2
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: pingtest-pool2
annotations:
cni.projectcalico.org/ipv4pools: "[\"pool2\"]"
spec:
containers:
- args:
- sleep
- infinity
image: busybox
imagePullPolicy: Always
name: pingtest
EOF
Verify it has an IP address from pool2
kubectl get pod pingtest-pool2 -o wide
Result
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pingtest-pool2 1/1 Running 0 75s 192.168.219.0 ip-172-31-45-29 <none> <none>
From one of the original pingtest pods, ping the IP address.
ping 192.168.219.0 -c 4
Result
PING 192.168.219.0 (192.168.219.0): 56 data bytes
64 bytes from 192.168.219.0: seq=0 ttl=62 time=0.524 ms
64 bytes from 192.168.219.0: seq=1 ttl=62 time=0.459 ms
64 bytes from 192.168.219.0: seq=2 ttl=62 time=0.505 ms
64 bytes from 192.168.219.0: seq=3 ttl=62 time=0.492 ms
--- 192.168.219.0 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.459/0.495/0.524 ms
Clean up
kubectl delete deployments.apps pingtest
kubectl delete pod pingtest-pool2