绒布(网络层)和kubernetes的入口之间有什么区别?

时间:2018-10-17 05:43:00

标签: docker kubernetes google-cloud-platform docker-compose kubernetes-ingress

我正在GCP上设置2个VPC,我在每个上都设置了kubeadm,我们称它们为kubemaster和kubenode1。所以我在kubemaster和kubenode1上运行了kubeadm:

  • kubeadm init on kubemaster
  • 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上)从浏览器访问webapp,这就像我在minikube上尝试过的一样(我也使用与上面相同的kubectl设置minikube)。我进行了一些搜索,关于Ingress和网络层(kubernetes网站示例中的法兰绒)的人很多。

我的问题是这些Ingress和法兰绒是什么?如果我只想运行我的web应用程序,则哪一个是必需的,还是根本没有必要的?彼此如何与他人对抗?因为据我了解,分层如下:

Traffic -> Services -> Deployments/Pods

这些防护服和法兰绒服在哪里?如果两者都不是,为什么我的应用程序无法按预期运行(我在GCP设置中打开了所有端口,所以我认为这不是安全问题),我尝试设置Kubernetes Dashboard-UI,运行kubectl proxy,仍然浏览器无法访问这两种服务(部署中的我的Webapp和Dashboard API),这可能会让我有点迷失。

3 个答案:

答案 0 :(得分:1)

法兰绒和Ingress是完全不同的东西。

flannel是一个CNI或容器网络接口插件,其任务是在容器之间建立网络。正如coreOS所说:

  

为每个容器分配了一个IP地址,该地址可用于   与同一主机上的其他容器通信。为了沟通   通过网络,容器绑定到主机的IP地址   机器,并且必须依靠端口映射才能到达所需的容器。   这使得容器内运行的应用程序很难   公布其外部IP和端口,因为该信息不是   提供给他们。

     

法兰通过为每个容器提供一个可以   用于容器到容器的通信。它使用包   封装以创建覆盖整个网络的虚拟覆盖网络   簇。更具体地说,法兰绒为每个主机提供一个IP子网(/ 24   默认情况下),Docker守护程序能够从该IP地址向其中分配IP   单个容器。

Kubernetes支持其他一些CNI插件:Calico,weave等。它们根据功能而异(例如,支持诸如NetworkPolicy之类的功能以限制资源)

Ingress是一个Kubernetes对象,通常在网络堆栈(HTTP)的应用程序层上运行,并允许您在外部公开您的Service,它还提供诸如HTTP请求路由,基于cookie的会话亲和力, HTTPS流量终止等。 (就像网络服务器Nginx或Apache一样)

答案 1 :(得分:0)

一般说来,短的,法兰绒的或Pod到Pod的网络层是使Pod在Kubernetes中彼此交谈的原因。另一方面,Ingress Controller负责将Ingress对象转换为规则,以通过Pod到Pod网络接收(主要是)HTTP(S)流量并将其转发到后备服务。

正如您所看到的,从技术上讲,您只需要第一个(点对点网络),因为您可以使用NodePort或LoadBalancer服务直接在某个地方公开服务,但是如果公开多个,则使用Ingress非常方便服务(就像您在传统的Web服务器安装中使用虚拟主机一样。

答案 2 :(得分:0)

我想添加更多点以及现有答案。

  

之后,我只需从浏览器(在本地   机器不在GCP上),就像我在minikube上尝试过的一样

您是否打开了NodePort的安全规则/防火墙规则?您在哪个实例上打开了,在哪个实例上打了访问您的应用程序?

  

我的问题是这些Ingress和法兰绒是什么?

我建议您阅读官方文档。但是无论如何,既然您问了这个问题,我想说几句话。

  • Flannel是容器的中继网络,容器的子网可以跨越多个节点(与本机docker网络主机n / w,NAT等相反)。每次生成时,每个容器都会获得自己的IP。 flannel更像是K8内部的容器网络的普通控件
  • Ingress是用于负载均衡器的智能路由器(或者现在很简单,我们可以说它将应用程序暴露在K8之外)。它适用于应用程序级别。达到“入口”设置后,它将转发到服务(取决于入口规则),然后转发到应用程序窗格。

我看到您在谈论ClusterIP。通常,ClusterIP是K8s服务的IP,仅是“ IP表规则”的魔力。定义“服务”后,Kube-Proxy负责在每个节点中编写ip表规则。这些ip表规则或ClusterIP指向实际的pod IP(法兰绒守护程序分配的IP)。希望您能理解法兰绒和“ Ingress”如何适合图片,或者一起工作或对应用程序流量负责。(如果我错了,请更正。!!

  • 您可以粘贴入口控制器Yaml内容吗?您定义了哪些规则?
  • 由于您使用的是GCP,为什么不尝试使用GKE?我的意思是说,它易于部署,除了您可以使用LoadBalancer而不是依靠Ingress来访问应用程序(无论如何,这与我的业务无关:-))
相关问题