README ยถ
Next-Gen Cilium CLI (Experimental)
Installation
To build and install, use the install
target:
make install
You may set the BINDIR
environment variable to install the binary in a
specific location instead of /usr/local/bin
, e.g.
BINDIR=~/.local/bin make install
Alternatively, to install the latest binary release on Linux or macOS:
OS
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-amd64.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz{,.sha256sum}
Capabilities
Install Cilium
To install Cilium while automatically detected:
cilium install
๐ฎ Auto-detected Kubernetes kind: minikube
โจ Running "minikube" validation checks
โ
Detected minikube version "1.5.2"
โน๏ธ Cilium version not set, using default version "v1.9.1"
๐ฎ Auto-detected cluster name: minikube
๐ฎ Auto-detected datapath mode: tunnel
๐ Found existing CA in secret cilium-ca
๐ Generating certificates for Hubble...
๐ Creating service accounts...
๐ Creating cluster roles...
๐ Creating ConfigMap...
๐ Creating agent DaemonSet...
๐ Creating operator Deployment...
Supported Environments
- minikube
- kind
- EKS
- self-managed
- GKE
- AKS
- k3s
- Rancher
Cluster Context Management
cilium context
Context: minikube
Cluster: minikube
Auth: minikube
Host: https://192.168.64.25:8443
TLS server name:
CA path: /Users/tgraf/.minikube/ca.crt
Hubble
cilium hubble enable
๐ Generating certificates for Relay...
โจ Deploying Relay...
Status
cilium status
/ยฏยฏ\
/ยฏยฏ\__/ยฏยฏ\ Cilium: OK
\__/ยฏยฏ\__/ Operator: OK
/ยฏยฏ\__/ยฏยฏ\ Hubble: OK
\__/ยฏยฏ\__/
\__/
DaemonSet cilium Desired: 1, Ready: 1/1, Available: 1/1
Deployment cilium-operator Desired: 1, Ready: 1/1, Available: 1/1
Deployment hubble-relay Desired: 1, Ready: 1/1, Available: 1/1
Containers: cilium Running: 1
cilium-operator Running: 1
hubble-relay Running: 1
Image versions cilium quay.io/cilium/cilium:v1.9.1: 1
cilium-operator quay.io/cilium/operator-generic:v1.9.1: 1
hubble-relay quay.io/cilium/hubble-relay:v1.9.1: 1
Connectivity Check
cilium connectivity test --single-node
โ Waiting for deployments to become ready
๐ญ Enabling Hubble telescope...
โ ๏ธ Unable to contact Hubble Relay: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp [::1]:4245: connect: connection refused"
โ ๏ธ Did you enable and expose Hubble + Relay?
โน๏ธ You can export Relay with a port-forward: kubectl port-forward -n kube-system deployment/hubble-relay 4245:4245
โน๏ธ Disabling Hubble telescope and flow validation...
-------------------------------------------------------------------------------------------
๐ Validating from pod cilium-test/client-9f579495f-b2pcq to pod cilium-test/echo-same-node-7f877bbf9-p2xg8...
-------------------------------------------------------------------------------------------
โ
client pod client-9f579495f-b2pcq was able to communicate with echo pod echo-same-node-7f877bbf9-p2xg8 (10.0.0.166)
-------------------------------------------------------------------------------------------
๐ Validating from pod cilium-test/client-9f579495f-b2pcq to outside of cluster...
-------------------------------------------------------------------------------------------
โ
client pod client-9f579495f-b2pcq was able to communicate with cilium.io
-------------------------------------------------------------------------------------------
๐ Validating from pod cilium-test/client-9f579495f-b2pcq to local host...
-------------------------------------------------------------------------------------------
โ
client pod client-9f579495f-b2pcq was able to communicate with local host
-------------------------------------------------------------------------------------------
๐ Validating from pod cilium-test/client-9f579495f-b2pcq to service echo-same-node...
-------------------------------------------------------------------------------------------
โ
client pod client-9f579495f-b2pcq was able to communicate with service echo-same-node
With Flow Validation
cilium hubble port-forward&
cilium connectivity test --single-node
โ Waiting for deployments to become ready
๐ญ Enabling Hubble telescope...
Handling connection for 4245
โน๏ธ Hubble is OK, flows: 405/4096
-------------------------------------------------------------------------------------------
๐ Validating from pod cilium-test/client-9f579495f-b2pcq to pod cilium-test/echo-same-node-7f877bbf9-p2xg8...
-------------------------------------------------------------------------------------------
๐ Flow logs of pod cilium-test/client-9f579495f-b2pcq:
Jan 6 13:41:17.739: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: SYN)
Jan 6 13:41:17.739: 10.0.0.166:8080 -> 10.0.0.11:43876 to-endpoint FORWARDED (TCP Flags: SYN, ACK)
Jan 6 13:41:17.739: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK)
Jan 6 13:41:17.739: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Jan 6 13:41:17.755: 10.0.0.166:8080 -> 10.0.0.11:43876 to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Jan 6 13:41:17.756: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Jan 6 13:41:17.757: 10.0.0.166:8080 -> 10.0.0.11:43876 to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Jan 6 13:41:17.757: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK)
๐ Flow logs of pod cilium-test/echo-same-node-7f877bbf9-p2xg8:
Jan 6 13:41:17.739: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: SYN)
Jan 6 13:41:17.739: 10.0.0.166:8080 -> 10.0.0.11:43876 to-endpoint FORWARDED (TCP Flags: SYN, ACK)
Jan 6 13:41:17.739: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK)
Jan 6 13:41:17.739: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Jan 6 13:41:17.755: 10.0.0.166:8080 -> 10.0.0.11:43876 to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Jan 6 13:41:17.756: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Jan 6 13:41:17.757: 10.0.0.166:8080 -> 10.0.0.11:43876 to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Jan 6 13:41:17.757: 10.0.0.11:43876 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK)
โ
client pod client-9f579495f-b2pcq was able to communicate with echo pod echo-same-node-7f877bbf9-p2xg8 (10.0.0.166)
-------------------------------------------------------------------------------------------
๐ Validating from pod cilium-test/client-9f579495f-b2pcq to outside of cluster...
-------------------------------------------------------------------------------------------
โ Found RST in pod cilium-test/client-9f579495f-b2pcq
โ FIN not found in pod cilium-test/client-9f579495f-b2pcq
๐ Flow logs of pod cilium-test/client-9f579495f-b2pcq:
Jan 6 13:41:22.025: 10.0.0.11:55334 -> 10.0.0.243:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.025: 10.0.0.11:55334 -> 10.0.0.243:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.027: 10.0.0.243:53 -> 10.0.0.11:55334 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.028: 10.0.0.243:53 -> 10.0.0.11:55334 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.028: 10.0.0.11:56466 -> 10.0.0.104:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.028: 10.0.0.11:56466 -> 10.0.0.104:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.029: 10.0.0.104:53 -> 10.0.0.11:56466 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.029: 10.0.0.104:53 -> 10.0.0.11:56466 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.030: 10.0.0.11:57691 -> 10.0.0.243:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.030: 10.0.0.243:53 -> 10.0.0.11:57691 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.030: 10.0.0.11:57691 -> 10.0.0.243:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.031: 10.0.0.243:53 -> 10.0.0.11:57691 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.031: 10.0.0.11:52849 -> 10.0.0.104:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.032: 10.0.0.104:53 -> 10.0.0.11:52849 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.033: 10.0.0.11:52849 -> 10.0.0.104:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.037: 10.0.0.104:53 -> 10.0.0.11:52849 to-endpoint FORWARDED (UDP)
Jan 6 13:41:22.038: 10.0.0.11:45040 -> 172.217.168.46:443 to-stack FORWARDED (TCP Flags: SYN)
Jan 6 13:41:22.041: 172.217.168.46:443 -> 10.0.0.11:45040 to-endpoint FORWARDED (TCP Flags: SYN, ACK)
Jan 6 13:41:22.041: 10.0.0.11:45040 -> 172.217.168.46:443 to-stack FORWARDED (TCP Flags: ACK)
Jan 6 13:41:22.059: 10.0.0.11:45040 -> 172.217.168.46:443 to-stack FORWARDED (TCP Flags: ACK, PSH)
Jan 6 13:41:22.073: 172.217.168.46:443 -> 10.0.0.11:45040 to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Jan 6 13:41:22.096: 10.0.0.11:45040 -> 172.217.168.46:443 to-stack FORWARDED (TCP Flags: ACK, RST)
Jan 6 13:41:22.097: 172.217.168.46:443 -> 10.0.0.11:45040 to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Jan 6 13:41:22.097: 10.0.0.11:45040 -> 172.217.168.46:443 to-stack FORWARDED (TCP Flags: RST)
โ
client pod client-9f579495f-b2pcq was able to communicate with cilium.io
-------------------------------------------------------------------------------------------
๐ Validating from pod cilium-test/client-9f579495f-b2pcq to local host...
-------------------------------------------------------------------------------------------
๐ Flow logs of pod cilium-test/client-9f579495f-b2pcq:
Jan 6 13:41:25.305: 10.0.0.11 -> 192.168.64.25 to-stack FORWARDED (ICMPv4 EchoRequest)
Jan 6 13:41:25.305: 192.168.64.25 -> 10.0.0.11 to-endpoint FORWARDED (ICMPv4 EchoReply)
โ
client pod client-9f579495f-b2pcq was able to communicate with local host
-------------------------------------------------------------------------------------------
๐ Validating from pod cilium-test/client-9f579495f-b2pcq to service echo-same-node...
-------------------------------------------------------------------------------------------
๐ Flow logs of pod cilium-test/client-9f579495f-b2pcq:
Jan 6 13:41:30.499: 10.0.0.11:39559 -> 10.0.0.104:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:30.499: 10.0.0.11:39559 -> 10.0.0.104:53 to-endpoint FORWARDED (UDP)
Jan 6 13:41:30.500: 10.0.0.104:53 -> 10.0.0.11:39559 to-endpoint FORWARDED (UDP)
Jan 6 13:41:30.500: 10.0.0.104:53 -> 10.0.0.11:39559 to-endpoint FORWARDED (UDP)
Jan 6 13:41:30.503: 10.0.0.11:59414 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: SYN)
Jan 6 13:41:30.503: 10.0.0.166:8080 -> 10.0.0.11:59414 to-endpoint FORWARDED (TCP Flags: SYN, ACK)
Jan 6 13:41:30.503: 10.0.0.11:59414 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK)
Jan 6 13:41:30.503: 10.0.0.11:59414 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Jan 6 13:41:30.505: 10.0.0.166:8080 -> 10.0.0.11:59414 to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Jan 6 13:41:30.509: 10.0.0.11:59414 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Jan 6 13:41:30.509: 10.0.0.166:8080 -> 10.0.0.11:59414 to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Jan 6 13:41:30.509: 10.0.0.11:59414 -> 10.0.0.166:8080 to-endpoint FORWARDED (TCP Flags: ACK)
โ
client pod client-9f579495f-b2pcq was able to communicate with service echo-same-node
Network Performance test
cilium connectivity test --perf
๐ฅ Performance Test Summary
-----------------------------------------------------------------------------------------------------------------------------
๐ Scenario | Test | Num Samples | Duration | Avg value
-----------------------------------------------------------------------------------------------------------------------------
๐ perf-client-5d7cb4d587-cn8sw | TCP_RR | 1 | 10s | 29975.37 (OP/s)
๐ perf-client-5d7cb4d587-cn8sw | TCP_CRR | 1 | 10s | 3926.56 (OP/s)
๐ perf-client-5d7cb4d587-cn8sw | TCP_STREAM | 1 | 10s | 2275.42 (Mb/s)
๐ perf-client-other-node-7867748554-vfvgt | TCP_RR | 1 | 10s | 964.55 (OP/s)
๐ perf-client-other-node-7867748554-vfvgt | TCP_STREAM | 1 | 10s | 4743.39 (Mb/s)
๐ perf-client-other-node-7867748554-vfvgt | UDP_RR | 1 | 10s | 1134.20 (OP/s)
๐ perf-client-other-node-7867748554-vfvgt | UDP_STREAM | 1 | 10s | 1425.74 (Mb/s)
๐ perf-client-5d7cb4d587-cn8sw | UDP_RR | 1 | 10s | 31737.62 (OP/s)
๐ perf-client-5d7cb4d587-cn8sw | UDP_STREAM | 1 | 10s | 865.24 (Mb/s)
๐ perf-client-other-node-7867748554-vfvgt | TCP_CRR | 1 | 10s | 435.80 (OP/s)
-----------------------------------------------------------------------------------------------------------------------------
ClusterMesh
Install Cilium & enable ClusterMesh in Cluster 1
cilium install --helm-set=cluster.id=1
๐ฎ Auto-detected Kubernetes kind: GKE
โน๏ธ Cilium version not set, using default version "v1.9.1"
๐ฎ Auto-detected cluster name: gke-cilium-dev-us-west2-a-tgraf-cluster1
๐ฎ Auto-detected datapath mode: gke
โ
Detected GKE native routing CIDR: 10.52.0.0/14
๐ Creating resource quotas...
๐ Found existing CA in secret cilium-ca
๐ Generating certificates for Hubble...
๐ Creating service accounts...
๐ Creating cluster roles...
๐ Creating ConfigMap...
๐ Creating GKE Node Init DaemonSet...
๐ Creating agent DaemonSet...
๐ Creating operator Deployment...
cilium clustermesh enable
โจ Validating cluster configuration...
โ
Valid cluster identification found: name="gke-cilium-dev-us-west2-a-tgraf-cluster1" id="1"
๐ Found existing CA in secret cilium-ca
๐ Generating certificates for ClusterMesh...
โจ Deploying clustermesh-apiserver...
๐ฎ Auto-exposing service within GCP VPC (cloud.google.com/load-balancer-type=internal)
Install Cilium in Cluster 2
cilium install --context gke_cilium-dev_us-west2-a_tgraf-cluster2 --helm-set=cluster.id=2
๐ฎ Auto-detected Kubernetes kind: GKE
โน๏ธ Cilium version not set, using default version "v1.9.1"
๐ฎ Auto-detected cluster name: gke-cilium-dev-us-west2-a-tgraf-cluster2
๐ฎ Auto-detected datapath mode: gke
โ
Detected GKE native routing CIDR: 10.4.0.0/14
๐ Creating resource quotas...
๐ Found existing CA in secret cilium-ca
๐ Generating certificates for Hubble...
๐ Creating service accounts...
๐ Creating cluster roles...
๐ Creating ConfigMap...
๐ Creating GKE Node Init DaemonSet...
๐ Creating agent DaemonSet...
๐ Creating operator Deployment...
cilium clustermesh enable --context gke_cilium-dev_us-west2-a_tgraf-cluster2
โจ Validating cluster configuration...
โ
Valid cluster identification found: name="gke-cilium-dev-us-west2-a-tgraf-cluster2" id="2"
๐ Found existing CA in secret cilium-ca
๐ Generating certificates for ClusterMesh...
โจ Deploying clustermesh-apiserver...
๐ฎ Auto-exposing service within GCP VPC (cloud.google.com/load-balancer-type=internal)
Connect Clusters
cilium clustermesh connect --destination-context gke_cilium-dev_us-west2-a_tgraf-cluster2
โจ Extracting access information of cluster gke-cilium-dev-us-west2-a-tgraf-cluster2...
๐ Extracting secrets from cluster gke-cilium-dev-us-west2-a-tgraf-cluster2...
โน๏ธ Found ClusterMesh service IPs: [10.168.15.209]
โจ Extracting access information of cluster gke-cilium-dev-us-west2-a-tgraf-cluster1...
๐ Extracting secrets from cluster gke-cilium-dev-us-west2-a-tgraf-cluster1...
โน๏ธ Found ClusterMesh service IPs: [10.168.15.208]
โจ Connecting cluster gke_cilium-dev_us-west2-a_tgraf-cluster1 -> gke_cilium-dev_us-west2-a_tgraf-cluster2...
๐ Patching existing secret cilium-clustermesh...
โจ Patching DaemonSet with IP aliases cilium-clustermesh...
โจ Connecting cluster gke_cilium-dev_us-west2-a_tgraf-cluster2 -> gke_cilium-dev_us-west2-a_tgraf-cluster1...
๐ Patching existing secret cilium-clustermesh...
โจ Patching DaemonSet with IP aliases cilium-clustermesh...
Encryption
Install a Cilium in a cluster and enable encryption with IPsec
cilium install --encryption=ipsec
๐ฎ Auto-detected Kubernetes kind: kind
โจ Running "kind" validation checks
โ
Detected kind version "0.9.0"
โน๏ธ Cilium version not set, using default version "v1.9.2"
๐ฎ Auto-detected cluster name: kind-chart-testing
๐ฎ Auto-detected IPAM mode: kubernetes
๐ Found existing CA in secret cilium-ca
๐ Generating certificates for Hubble...
๐ Creating Service accounts...
๐ Creating Cluster roles...
๐ Generated encryption secret cilium-ipsec-keys
๐ Creating ConfigMap...
๐ Creating Agent DaemonSet...
๐ Creating Operator Deployment...
โ Waiting for Cilium to be installed...
Directories ยถ
Path | Synopsis |
---|---|
cmd
|
|
internal/add-image-digests
add-image-digests updates defaults/imagedigests.json.
|
add-image-digests updates defaults/imagedigests.json. |
internal
|
|
Package k8s provides various helper functions for interacting with Kubernetes APIs.
|
Package k8s provides various helper functions for interacting with Kubernetes APIs. |
Click to show internal directories.
Click to hide internal directories.