02.Ingress

Ingress

Ingress是从Kubernetes集群外部访问集群内部服务的入口。Service虽然解决了服务发现和负载均衡的问题,但它在使用上还是有一些限制,比如对外访问的时候,NodePort类型需要在外部搭建额外的负载均衡,而LoadBalancer要求Kubernetes必须跑在支持的Cloud Provider上面。

Ingress 访问架构

Ingress就是为了解决这些限制而引入的新资源,主要用来将服务暴露到Cluster外面,并且可以自定义服务的访问策略。比如想要通过负载均衡器实现不同子域名到不同服务的访问:

foo.bar.com --|                 |-> foo.bar.com s1:80
              | 178.91.123.132  |
bar.foo.com --|                 |-> bar.foo.com s2:80

如上的需求我们可以定义为如下的Ingress Controller

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
    - host: foo.bar.com
      http:
        paths:
          - backend:
              serviceName: s1
              servicePort: 80
    - host: bar.foo.com
      http:
        paths:
          - backend:
              serviceName: s2
              servicePort: 80

Ingress本身并不会自动创建负载均衡器,集群中需要运行一个Ingress Controller来根据Ingress的定义来管理负载均衡器。

Links