Kubernetes(二十八)—IPv4\IPv6 双协议栈

 

虚拟机配置IPV6

环境:虚拟机使用NAT模式并启用IPV6

image

vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6ADDR=fd15:4ba5:5a2b:1008::10/64
IPV6_DEFAULTGW=fd15:4ba5:5a2b:1008::1
NAME=ens33
DEVICE=ens33
IPADDR="192.168.136.58"
PREFIX=24
GATEWAY=192.168.136.2
DNS1=114.114.114.114
ONBOOT=yes
 vim /etc/sysctl.conf 
net.ipv6.conf.all.accept_dad = 0
net.ipv6.conf.default.accept_dad = 0
net.ipv6.conf.ens33.accept_dad = 0
sysctl -p
serice network restart

因为我的外网并没有IPV6功能,所以仅能在NAT局域内部使用 使用主机ping -6

image

配置成功

sysctl参数启用ipv6

各节点都开启

vim /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
 
 
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
 
 
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
reboot

初始化集群

docker pull coredns/coredns
docker tag coredns/coredns registry.aliyuncs.com/google_containers/coredns
vim kubeadm-init.yaml 
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: fd15:4ba5:5a2b:1008::10
  bindPort: 6443
nodeRegistration:
  taints:
  - effect: PreferNoSchedule
    key: node-role.kubernetes.io/master
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.23.0
imageRepository: registry.aliyuncs.com/google_containers
networking:
  podSubnet: 10.244.0.0/16,2001:db8:42:0::/56
  serviceSubnet: 10.96.0.0/16,2001:db8:42:1::/112
kubeadm init --config=kubeadm-init.yaml

image

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node节点加入master

kubeadm join [fd15:4ba5:5a2b:1008::10]:6443 --token a7nn29.3s6b1q0pjrxxuwhi \
        --discovery-token-ca-cert-hash sha256:5648eeecff97b13cb22e8d1f0ed8bbec06425424934e7afe8b90e50871e5dc7b 

image

安装Calico

卸载flannel

#每个节点都要执行
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
systemctl restart kubelet

安装Calico

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

image

image

安装Calio-IPV6

wget https://raw.githubusercontent.com/cby-chen/Kubernetes/main/yaml/calico-ipv6.yaml

备用地址:https://download.yutao.co/mirror/calico-ipv6.yaml

vim calico-ipv6.yaml

在38行左右,改为自己的初始化podIP地址

          "ipam": {
              "type": "calico-ipam",
              "assign_ipv4": "true",
              "assign_ipv6": "true"
          },
          - name: IP
            value: "autodetect"

          - name: IP6
            value: "autodetect"

          - name: CALICO_IPV4POOL_CIDR
            value: "10.244.0.0/16"

          - name: CALICO_IPV6POOL_CIDR
            value: "2001:db8:42:0::/56"

          - name: FELIX_IPV6SUPPORT
            value: "true"
kubectl  apply -f calico-ipv6.yaml 

验证 IPv4/IPv6 双协议栈

kubectl get nodes k8s-node1 -o go-template --template=''

image