Я пытаюсь создать кластер Kubernetes
для учебных целей.Итак, я создал 3 виртуальные машины с Vagrant
, где мастер имеет IP-адрес 172.17.8.101
, а две другие - 172.17.8.102
и 172.17.8.103
.
. Понятно, что нам нужно Flannel
, чтобынаши контейнеры на разных машинах могут соединяться друг с другом без сопоставления портов.И чтобы Flannel
заработал, нам нужно Etcd
, потому что фланель использует этот Datastore
для помещения и получения своих данных.
Я установил Etcd
на главном узле и поместил Flannel
сетевой адрес на него с помощью команды etcdctl set /coreos.com/network/config '{"Network": "10.33.0.0/16"}'
Чтобы включить ip masquerading
, а также с помощью интерфейса частной сети на виртуальной машинеЯ добавил --ip-masq --iface=enp0s8
в FLANNEL_OPTIONS
в /etc/sysconfig/flannel
файле.
Для того, чтобы Docker
использовал Flannel
сеть, я добавил --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU}'
в OPTIONS
переменную в /etc/sysconfig/docker
файле,Обратите внимание, что значения переменных FLANNEL_SUBNET
и FLANNEL_MTU
установлены в файле Flannel
в файле /run/flannel/subnet.env
.
После всех этих настроек я установил kubernetes-master
и kubernetes-client
на мастерузел и kubernetes-node
на всех узлах.Для окончательных конфигураций я изменил значение KUBE_SERVICE_ADDRESSES
в файле /etc/kubernetes/apiserver
на --service-cluster-ip-range=10.33.0.0/16
и значение KUBELET_API_SERVER
в файле /etc/kubernetes/kubelet
на --api-servers=http://172.17.8.101:8080
.
Это ссылка на k8s-Tutorial Project Репозиторий с полными файлами.
После всех этих усилий все сервисы запускаются успешно и работают нормально.Понятно, что когда я использую команду kubectl get nodes
, работают 3 узла.Я могу успешно создать модуль nginx
с помощью команды kubectl run nginx-pod --image=nginx --port=80 --labels="app=nginx"
и создать службу с помощью команды kubectl expose pod nginx-pod --port=8000 --target-port=80 --name="service-pod"
.
Команда kubectl describe service service-pod
выдает следующие результаты:
Name: service-pod
Namespace: default
Labels: app=nginx
Selector: app=nginx
Type: ClusterIP
IP: 10.33.39.222
Port: <unset> 8000/TCP
Endpoints: 10.33.72.2:80
Session Affinity: None
No events.
Проблема в том, что когда я пытаюсь подключиться к созданному сервису с помощью curl 10.33.79.222:8000
, я получаю curl: (7) Failed connect to 10.33.72.2:8000; Connection refused
, но если я пытаюсь curl 10.33.72.2:80
, я получаю страницу по умолчанию nginx
.Кроме того, я не могу пропинговать 10.33.79.222
, и все пакеты теряются.
Некоторые предлагали остановить и отключить Firewalld
, но он вообще не работал на узлах.Поскольку Docker
изменил FORWARD
цепную политику на DROP
в Iptables
после версии 1.13, я изменил ее обратно на ACCEPT
, но это тоже не помогло.В конце концов я попытался изменить CIDR
и использовать другие IP / подсети, но не повезло.
Кто-нибудь знает, где я иду не так или как выяснить, в чем проблема, которую я не могу подключить к созданномусервис