Kubernetes 使用负载均衡器公开入口资源(API 对象)?

Kubernetes expose ingress resource (API object) with load balancer?

我在 amazon ews 上有一个 kubernetes 集群,我打算在上面 运行 多个应用程序。

我有多个服务组成一个这样的应用程序,我想使用亚马逊负载均衡器 (elb) 将它们公开到 Internet。我想使用 ELB,因为我不想直接使用端口 80,因为许多应用程序共享此端口,我希望它们中的每一个都独立于其他应用程序定义它们的入口资源。

我阅读了有关 kubernetes ingress 资源的信息,并认为这正是我正在寻找的。但是我没有设法通过带有负载均衡器的服务公开它。现在,当我阅读文档时,Services are meant to expose pods 但入口是:

An API object that manages external access to the services in a cluster, typically HTTP.

我正在尝试做的事情是可能的还是我没有掌握一些概念并试图做一些不可能或错误的事情?


我的代码:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  labels:
    id: ingress
spec:
  rules:
  - http:
      paths:
      - path: /api/devices
        backend:
          serviceName: device-management
          servicePort: 3001
      - path: /api/datasources
        backend:
          serviceName: data-acquisition
          servicePort: 3001
      - path: /auth,/account,/api/tenants,/api/users
        backend:
          serviceName: device-management
          servicePort: 3001
## TODO: Find out how to add subdomain entry for auth.domain and s3.domain 
---
apiVersion: v1
kind: Service
metadata:
  name: ingress
  labels:
    id: ingress
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443
  selector:
    id: ingress 

kubectl describe service ingress 的输出包含

Endpoints: none

问题是我没有安装入口控制器。文档指出:

You need an Ingress controller to satisfy an Ingress, simply creating the resource will have no effect.

入口控制器创建一个 nginx pod 和一个服务(负载均衡器),然后将执行所有入口资源中描述的规则。 installation guide 提供了有关如何在不同平台上安装它的更多信息。

ingress controller替换了我上面描述的服务,并实现了集群中描述的所有ingress资源。