calico change provider network IP address route via

Patch 

# https://stackoverflow.com/questions/41958475/getting-the-object-array-index-in-jq
# https://www.codegrepper.com/code-examples/javascript/jq+array.length
kubectl get ds calico-node  -n kube-system -o json |jq '.spec.template.spec.containers[0].env | length'
kubectl get ds calico-node  -n kube-system -o json |jq '.spec.template.spec.containers[0].env |map(.name == "IP_AUTODETECTION_METHOD") | index(true)'
kubectl get ds calico-node  -n kube-system -o json |jq '[ .spec.template.spec.containers[0].env | debug | .name == "IP_AUTODETECTION_METHOD" ] | index(true)
kubectl get ds calico-node  -n kube-system -o json |jq '[ .spec.template.spec.containers[0].env | debug | map(.name == "IP_AUTODETECTION_METHOD") ] | index(true)'

LEN=`kubectl get ds calico-node  -n kube-system -o json | 
  jq '.spec.template.spec.containers[0].env | length'`
IDX=$((LEN-1))
IDX=`kubectl get ds calico-node  -n kube-system -o json |jq '.spec.template.spec.containers[0].env | 
  map(.name == "IP_AUTODETECTION_METHOD") | index(true)'`

DS=calico-node

CMPATH=/spec/template/spec/containers/0/env/$IDX/value
VAL="cidr=192.168.10.66/24"

kubectl patch ds/$DS -n kube-system --type='json' -p '[
  {"op":"replace","path":"'"$CMPATH"'","value": "'"$VAL"'"},
]'

Add

NM=IP_AUTODETECTION_METHOD
CMPATH=/spec/template/spec/containers/0/env/-
kubectl patch ds/$DS -n kube-system --type='json' -p '[
  {"op":"add","path":"'"$CMPATH"'","value": {"name": "'"$NM"'", "value": "'"$VAL"'"}},
]'

Change apiserver listen address after deployment

CLUSTER_PNET=192.168.10.66/24
 
IDX=`kubectl get pods -n kube-system kube-apiserver-controller -o json | 
  jq '.spec.containers[0].command |map(contains("--advertise-address=")) |index(true)'`
 
CMPATH=/spec/containers/0/command/$IDX
VAL="--advertise-address=1${CLUSTER_PNET%/*}"
DS=kube-apiserver-controller
 
kubectl patch pod/$DS -n kube-system --type='json' -p '[
  {"op":"replace","path":"'"$CMPATH"'","value": "'"$VAL"'"},
]'

had better change the ip before development

# CLUSTER_PNET IP 192.168.10.66 is the apiserver IP
CLUSTER_PNET=192.168.10.66/24
 
CON_PATH=roles/kubernetes/controlplane/templates/config.yaml.j2
ls ceek
if [ $? -eq 0 ]; then CON_PATH=ceek/$CON_PATH; fi
sed -i -e "/(.*)event-ttl/a     advertise-address: "${CLUSTER_PNET%/*}""  $CON_PATH
 
CON_PATH=roles/kubernetes/cni/calico/controlplane/files/customize_calico_container.yml
ls ceek
if [ $? -eq 0 ]; then CON_PATH=ceek/$CON_PATH; fi
sed -i -e "/(.*)IP_AUTODETECTION_METHOD/{n;s/(value: ).*/1"cidr=${CLUSTER_PNET%/*}/${CLUSTER_PNET#*/}"/}" $CON_PATH

【Calico系列】2 BGP入门笔记   

【Calico系列】3 Calico的组件、架构与原理

我们可以将 workload(工作负载) 当成容器或者虚拟机。

在 calico 中,计算节点充当了路由器的角色。它们为运行在本机上的容器或是虚拟机提供路由。我们称之为 vRouter。Linux Kernel 负责数据数据包路由, 通过BPG协议来控制路由分发, Flelix 来管理路由信息。

处于节点上的 Endpoint 只能同本节点 vRouter 通信, 数据包的第一条和最后一条都是通过 vRouter 中路由规则来实现。vRouter 间通过BGP协议来同步节点上的 Endpoint 信息。

kubernet+calico二进制安装及总结 deployment calico-kube-controllers

Kubernetes网络组件之Calico策略实践(BGP)  

calico学习  

Calico on Kubernetes 从入门到精通  Calico on Kubernetes 从入门到精通

calico VPP的实现

VPP dataplane implementation details  

Host network configuration   

 
原文地址:https://www.cnblogs.com/shaohef/p/14742757.html