Мне потребовалось некоторое время, чтобы проверить, но у меня наконец есть результат.Таким образом, выясняется, что причиной вашей проблемы является брандмауэр Calico и GCP.Чтобы быть более конкретным, вы должны добавить правила брандмауэра, прежде чем вы сможете добиться успеха с подключением.После этого документа об установке Calico for GCE:
GCE по умолчанию блокирует трафик между хостами;выполните следующую команду, чтобы позволить трафику Calico проходить между контейнерами на разных хостах (где параметр source-range предполагает, что вы создали свой проект с параметрами сети GCE по умолчанию - измените диапазон адресов, если ваш отличается):
Таким образом, вам нужно разрешить трафик проходить между контейнерами:
gcloud compute firewall-rules create calico-ipip --allow 4 --network "default" --source-ranges "10.128.0.0/9"
Обратите внимание, что этот IP-адрес следует изменить.Вы можете использовать в тестовых целях 10.0.0.0/8
, но это способ широкого диапазона, поэтому , пожалуйста, сузьте его до своих потребностей.
Затем приступите к настройке экземпляров для мастера и узлов.На самом деле вы можете пропустить большинство шагов из учебника, который вы опубликовали, так как подключение определяется поставщиком облачных услуг.Вот действительно простой скрипт, который я использую для Kubeadm на виртуальных машинах.Вы также можете выполнить это шаг за шагом.
#!/bin/bash
swapoff -a
echo net/bridge/bridge-nf-call-ip6tables = 1 >> /etc/ufw/sysctl.conf
echo net/bridge/bridge-nf-call-iptables = 1 >> /etc/ufw/sysctl.conf
echo net/bridge/bridge-nf-call-arptables = 1 >> /etc/ufw/sysctl.conf
apt-get install -y ebtables ethtool
apt-get update
apt-get install -y docker.io
apt-get install -y apt-transport-https
apt-get install -y curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
kubeadm init --pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
kubectl taint nodes --all node-role.kubernetes.io/master-
В моем случае я использовал простое приложение Redis из Kubernetes Документация
root@calico-master:/home/xxx# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m
redis-master ClusterIP 10.107.41.117 <none> 6379/TCP 26m
root@calico-master:/home/xxx# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
redis-master-57fc67768d-5lx92 1/1 Running 0 27m 192.168.1.4 calico <none>
root@calico-master:/home/xxx# ping 192.168.1.4
PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
64 bytes from 192.168.1.4: icmp_seq=1 ttl=63 time=1.48 ms
До правил брандмауэра и обычной установки Calico я не мог пинговать,ни wget
из службы, после этого нет проблем с проверкой IP-адреса или имени хоста, а также работает wget:
> root@calico-master:/home/xxx# wget http://10.107.41.117:6379
> --2018-10-24 13:24:43-- http://10.107.41.117:6379/ Connecting to 10.107.41.117:6379... connected. HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9 Length: unspecified
> Saving to: ‘index.html.2’
Шаги, описанные выше, также были протестированы на type: NodePort
, и это также работает.
Другой способ - использовать Flannel , который я также протестировал, и он работал из коробки для нужд тестирования вашей проблемы.Не забудьте прочитать больше о CNI, чтобы вы могли выбрать тот, который соответствует вашим потребностям.Надеюсь, это решит вашу проблему.