Kubernetes – Ingress

什么是Ingress

Kubernetes中,Ingress(入口)是一个对象,作用是让外部可以访问集群内部的服务。Ingress通过创建访问规则,定义了哪些进入的请求可以访问哪些服务。

这让我们可以很方便地定义服务的路由规则。例如,要把对example.com/api/v1/的访问导向到api-v1服务,对example.com/api/v2/的服务导向到api-v2服务,就可使用Ingress轻松进行设置,而无需创建一堆LoadBalancers或在节点上暴露每个服务。

Ingress 与 LoadBalancer、NodePort 比较

Ingress, LoadBalancer, NodePort做的都是同一件事情,对外暴露服务,让外部可以访问。

NodePort

图

在服务的YAML文件中,可以将服务类型设置为NodePort,为对外暴露服务,Kubernetes将在每个工作节点上,为服务分配一个特定端口,可以通过节点IP与该端口访问服务。

NodePort的优点是简单,缺点是功能不够强大,你不知道服务将被分配到哪个端口,端口也可能会变化,在某个时候被重新分配。

LoadBalancer

图

与NodePort类似,在服务的YAML文件中,服务类型也可以设置为LoadBalancer类型。LoadBalancer类型需要集群外部有负载均衡模块,通常由云供应商(如阿里云)提供。

每次想要向外界暴露一个服务时,你都必须创建一个新的LoadBalancer并获得一个IP地址。

Ingress

图

NodePort和LoadBalancer都是服务类型,在服务的yaml文件中设置。与此不同,Ingress是一个完全独立的服务资源对象,你可以创建和销毁它。

使用Ingress可以统一管理路由规则,并且与集群内的服务解耦。

Ingress yaml

下面是Ingress yaml 示例。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: dev
spec:
  rules:
  - host: test.apps.example.com
    http:
      paths:
      - backend:
          serviceName: hello-service
          servicePort: 80

上面声明的规则中,所有对test.apps.example.com的调用都被导到dev命名空间中的hello-service服务。

理解ingress对象的关键点:

  • 服务对与ingress对象应该属于同一个命名空间
  • ingress对象定义导流规则,真正导流的是ingress控制器

章节



浙ICP备17015664号-1 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载