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

时间:2018-06-13 14:34:48

标签: amazon-ec2 kubernetes nginx-reverse-proxy kubernetes-ingress

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

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

我读到了kubernetes ingress资源,并认为这正是我正在寻找的。但是,我没有设法通过带负载均衡器的服务公开它。现在,当我阅读文档时,服务旨在暴露pod,但是入口是:

  

一个API对象,用于管理对群集中服务的外部访问,通常是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的输出包含

  

端点:无

1 个答案:

答案 0 :(得分:0)

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

  

你需要一个Ingress控制器来满足Ingress,只需创建资源就没有效果了。

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

入口控制器取代我在上面描述的服务,并实现集群中所有的入口资源。