Configure CNI

Before we start making changes to VPC CNI, let’s make sure we are using latest CNI version

Run this command to find CNI version

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

Here is a sample response


amazon-k8s-cni:1.6.1
Upgrade to the latest v1.7 config if you have an older version:

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.7/config/v1.7/aws-k8s-cni.yaml

Wait until all the pods are recycled. You can check the status of pods by using this command

kubectl get pods -n kube-system -w

Configure Custom networking

Edit aws-node DaemonSet and add AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG environment variable to the node container spec and set it to true

Note: You only need to set one environment variable in the CNI daemonset configuration:

kubectl set env ds aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
kubectl describe daemonset aws-node -n kube-system | grep -A5 Environment

    Environment:
      AWS_VPC_K8S_CNI_LOGLEVEL:  	  DEBUG
      AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG: true
      MY_NODE_NAME:               	  (v1:spec.nodeName)
...

Terminate worker nodes so that Autoscaling launches newer nodes that come bootstrapped with custom network config

Use caution before you run the next command because it terminates all worker nodes including running pods in your workshop

INSTANCE_IDS=(`aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --filters "Name=tag-key,Values=eks:cluster-name" "Name=tag-value,Values=eksworkshop*" --output text` )
for i in "${INSTANCE_IDS[@]}"
do
	echo "Terminating EC2 instance $i ..."
	aws ec2 terminate-instances --instance-ids $i
done