Я настраиваю 2 VPC на GCP, я настраиваю kubeadm на каждом, назовем их kubemaster и kubenode1. Итак, я запустил kubeadm на kubemaster и kubenode1, которые:
kubeadm init на кубемастереkubeadm join на kubenode1Когда я пробовал kubectl apply -f (a deployment which contains a pod with simple webapps inside) и kubectl apply -f (a NodePort type of Service which target the deployment port)
После этого я просто получаю доступ к веб-приложениям из своего браузера (на моем локальном компьютере, а не на GCP), он просто не работает, как то, что я пробовал на minikube (я настраиваю minikube с тем же kubectl apply, как указано выше). Я копаю поиск, и многие люди говорят об Ingress и сетевом уровне (фланель на примере веб-сайта kubernetes)
У меня вопрос, что это за ингресс и фланель? Какой из них необходим или оба вообще не нужны, если я просто хочу, чтобы мое веб-приложение запускалось? Как друг друга работают против других? Потому что, насколько я понимаю, наслоение показано ниже:
Traffic -> Services -> Deployments/Pods
Куда подевались эти входные и фланелевые костюмы? Если дело не в них обоих, то почему мои приложения не работают должным образом (я открываю все порты в настройках GCP, так что, полагаю, это не проблема безопасности), я попытался настроить Kubernetes Dashboard-UI, запустить kubectl proxy, но мой браузер все равно не может получить доступ к обоим services (мое веб-приложение внутри развертывания, а также API-интерфейс Dashboard), может быть, я немного потерялся здесь.


Фланель и Ingress - это совершенно разные вещи.
flannel - это подключаемый модуль CNI или Container Network Interface, задачей которого является создание сети между контейнерами. Как говорит coreOS:
each container is assigned an IP address that can be used to communicate with other containers on the same host. For communicating over a network, containers are tied to the IP addresses of the host machines and must rely on port-mapping to reach the desired container. This makes it difficult for applications running inside containers to advertise their external IP and port as that information is not available to them.
flannel solves the problem by giving each container an IP that can be used for container-to-container communication. It uses packet encapsulation to create a virtual overlay network that spans the whole cluster. More specifically, flannel gives each host an IP subnet (/24 by default) from which the Docker daemon is able to allocate IPs to the individual containers.
Kubernetes поддерживает некоторые другие плагины CNI: Calico, weave и т. д. Они различаются в зависимости от функциональности (например, поддержка таких функций, как NetworkPolicy, для ограничения ресурсов).
Ingress - это объект Kubernetes, который обычно работает на прикладном уровне сетевого стека (HTTP) и позволяет вам открывать доступ к вашей службе извне, а также предоставляет такие функции, как маршрутизация HTTP-запросов, привязка сеанса на основе файлов cookie, завершение трафика HTTPS. и так далее. (как веб-сервер Nginx или Apache)
Ваши узлы подключаются друг к другу через сетевые интерфейсы (eth0, eth1 и т. д.). flannel - это не соединение узлов друг с другом, а сетевое взаимодействие контейнеров. ClusterIP - это не про стручки, это про объект k8s Service. Вам нужно больше теории, чтобы прояснить это.
Упомянутый короткий, фланелевый или сетевой уровень между модулями в целом - это то, что позволяет модулям взаимодействовать друг с другом в Kubernetes. С другой стороны, Ingress Controller - это то, что принимает объекты Ingress и превращает их в правила для приема и пересылки (в основном) HTTP (S) трафика к службам поддержки по сети от модуля к поду.
Как видите, технически вам нужен только первый (сеть от модуля к поду), поскольку вы можете напрямую выставить свою службу где-нибудь с помощью службы NodePort или LoadBalancer, но очень удобно использовать Ingress, если вы предоставляете несколько служб (довольно так же, как вы делаете с vhosts на классических установках веб-сервера.
Я хочу добавить еще несколько пунктов вместе с интересными ответами.
After that I simply access the webapps from my browser (on my local machine not on GCP), it just does not work as what I tried on minikube
Вы открывали правила безопасности / правила брандмауэра для NodePort? В каком экземпляре вы открыли, и какой экземпляр вы нажимаете, чтобы получить доступ к своему приложению?
My question is what are these Ingress and flannel?
Рекомендую прочитать официальную документацию. Но в любом случае, раз уж вы задали вопрос, я хотел бы сказать несколько слов.
Flannel - это сеть overrelay для контейнеров, подсеть для контейнера может охватывать несколько узлов (что противоположно собственному сетевому хосту docker n / w, NAT и т. д.). Каждый контейнер получает собственный IP-адрес каждый раз, когда он появляется. flannel больше похож на контрольную плоскость для контейнерной сети, которая является внутренней для K8s.
Ingress - это интеллектуальный маршрутизатор для балансировщика нагрузки (или пока просто, мы можем сказать, что он предоставляет приложение для сторонних K8s). Он работает на уровне приложения. Как только вы нажмете на точку входа "Ingress", она будет перенаправлена в службу (которая зависит от правил входа), а затем в модуль приложения.
Я вижу, вы говорили о ClusterIP. Как правило, ClusterIP - это IP-адрес службы K8s, который представляет собой не что иное, как волшебство «правил таблиц IP». Kube-Proxy отвечает за запись правил таблицы IP в каждый узел после определения «Службы». Эти правила таблицы IP или ClusterIP указывают на фактический IP-адрес модуля (IP-адрес, назначенный демоном flannel). Надеюсь, вы понимаете, как фланель и «Ingress» вписываются в общую картину, работают вместе или отвечают за трафик приложений. (Пожалуйста, поправьте, если я ошибаюсь .. !!)
LoadBalancer, а не зависеть от Ingress (в любом случае, это не мое дело :-))ок, значит у вас не было ошибок при создании Ingress / service / app? Я полагаю, вы обращаетесь к приложению типа <NODE_IP>:3000 ??
нет ошибок, нет, я обращаюсь к <NodeExternalIP>/, потому что вы видите входной маршрут к корневому пути, в любом случае не работает
@thegexploit Верно !. Можете ли вы проверить с помощью инструмента tcpdump, доходят ли пакеты, пока вы нажимаете запрос в своем браузере. Также проверьте логи модуля "Ingress-Controller"
Нужна ли мне фланель? потому что я думал, что между ними ведутся переговоры между контейнером и контейнером с использованием службы ClusterIP? фланель на самом деле только соединяет узлы с узлами. Мне нужно и то, и другое? или оба необязательны? Я все еще не понимаю