Traefik ingress没有在aws负载均衡器后面工作

时间:2018-05-14 17:25:33

标签: amazon-web-services kubernetes amazon-elb traefik kubernetes-ingress

在我创建了一个traefik守护进程之后,我在端口80上创建了一个服务作为loadbalancer,这是Traefik代理端口,并且节点自动注册到它。如果我点击elb我得到代理404,这是好的,因为还没有注册服务

然后我为web-ui创建了一个nodeport服务。在pod中定位端口8080,在clusterip上定位80。我可以从集群内部卷曲traefik ui并重新运行traefik UI

然后我创建了一个入口,这样当我点击elb / ui时它会让我进入traefik的后端web-ui服务并且它失败了。我的入口中也有正确的注释但是elb没有将路径路由到后端运行正常的traefik ui

我在这里做错了什么?如果需要,我可以发布所有的yml文件

UPD

我的yaml文件:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: traefik
  labels:
    app: traefik
spec:
  template:
    metadata:
      labels:
        app: traefik
    spec:
      containers:
      - image: traefik
        name: traefik
        args:
        - --api
        - --kubernetes
        - --logLevel=INFO
        - --web
        ports:
        - containerPort: 8080
          name: traefikweb
        - containerPort: 80
          name: traefikproxy


apiVersion: v1
kind: Service
metadata:
  name: traefik-proxy
spec:
  selector:
    app: traefik
  ports:
  - port: 80
    targetPort: traefikproxy
  type: LoadBalancer


apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
spec:
  selector:
    app: traefik
  ports:
  - name: http
    targetPort: 8080
    nodePort: 30001
    port: 80
  type: NodePort


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: default
  name: traefik-ing
  annotations:
    kubernetes.io/ingress.class: traefik
    #traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip:/ui
spec:
  rules:
  - http:
      paths:
      - path: /ui
        backend:
          serviceName: traefik-web-ui
          servicePort: 80

2 个答案:

答案 0 :(得分:0)

  

然后我创建了一个入口,这样当我点击elb / ui时,它会让我进入traefik的后端web-ui服务,但它失败了。"

它是如何失败的?您是否收到错误404,错误500或其他内容?

另外,对于traefik-web-ui服务,您不需要设置type: NodePort,它应该是type: ClusterIP

Ingress配置后端时,唯一的要求是群集内部的可用性,因此ClusterIP类型将足以满足要求。

您的服务应该是这样的:

apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
spec:
  selector:
    app: traefik
  ports:
  - name: http
    targetPort: 8080
    port: 80

选项PathPrefixStrip非常有用,因为如果没有它,请求会转发到带有/ui前缀的用户界面,您绝对不需要。

所有其他配置看起来都不错。

答案 1 :(得分:0)

如果您在Private_Subnets上,请使用

kind: Service
metadata:
  name: traefik-proxy
> annotations:
>     "service.beta.kubernetes.io/aws-load-balancer-internal": "0.0.0.0/0"
spec:
  selector:
    app: traefik
  ports:
  - port: 80
    targetPort: traefikproxy
  type: LoadBalancer```