Kubernetes Ingress 不适用于 traefisk

Kubernetes Ingress does not work with traefisk

我在 Google Cloud Platform 中创建了一个 kubernetes 集群,之后,我在集群上安装了 Helm/tiller,之后,我按照官方文档中的说明安装了带有 helm 的 traefik。

现在我正在尝试为服务创建 Ingress,但如果我放置注释 kubernetes.io/ingress.class: traefik,则不会创建 Ingress 的负载平衡器。 但是没有注释,它可以使用默认的 Ingress。 (服务类型为nodeport)

编辑:我也在一个干净的 google 云 kubernetes 集群中尝试了这个例子:https://supergiant.io/blog/using-traefik-as-ingress-controller-for-your-kubernetes-cluster/ 但它是一样的,当我选择 kubernetes.io/ingress.class: traefik 时,不会创建负载入口平衡器。

我的文件是: animals-svc.yaml:

---
apiVersion: v1
kind: Service
metadata:
  name: bear
spec:
  type: NodePort
  ports:
  - name: http
    targetPort: 80
    port: 80
  selector:
    app: animals
    task: bear
---
apiVersion: v1
kind: Service
metadata:
  name: moose
spec:
  type: NodePort
  ports:
  - name: http
    targetPort: 80
    port: 80
  selector:
    app: animals
    task: moose
---
apiVersion: v1
kind: Service
metadata:
  name: hare
  annotations:
    traefik.backend.circuitbreaker: "NetworkErrorRatio() > 0.5"
spec:
  type: NodePort
  ports:
  - name: http
    targetPort: 80
    port: 80
  selector:
    app: animals
    task: hare

animals-ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: animals
  annotations:
    kubernetes.io/ingress.class: traefik
    # kubernetes.io/ingress.global-static-ip-name: "my-reserved-global-ip"
    # traefik.ingress.kubernetes.io/frontend-entry-points: http
    # traefik.ingress.kubernetes.io/redirect-entry-point: http
    # traefik.ingress.kubernetes.io/redirect-permanent: "true"
spec:
  rules:
  - host: hare.minikube
    http:
      paths:
      - path: /
        backend:
          serviceName: hare
          servicePort: http
  - host: bear.minikube
    http:
      paths:
      - path: /
        backend:
          serviceName: bear
          servicePort: http
  - host: moose.minikube
    http:
      paths:
      - path: /
        backend:
          serviceName: moose
          servicePort: http

animals-deployment.yaml:

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: bear
  labels:
    app: animals
    animal: bear
spec:
  replicas: 2
  selector:
    matchLabels:
      app: animals
      task: bear
  template:
    metadata:
      labels:
        app: animals
        task: bear
        version: v0.0.1
    spec:
      containers:
      - name: bear
        image: supergiantkir/animals:bear
        ports:
        - containerPort: 80
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: moose
  labels:
    app: animals
    animal: moose
spec:
  replicas: 2
  selector:
    matchLabels:
      app: animals
      task: moose
  template:
    metadata:
      labels:
        app: animals
        task: moose
        version: v0.0.1
    spec:
      containers:
      - name: moose
        image: supergiantkir/animals:moose
        ports:
        - containerPort: 80
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: hare
  labels:
    app: animals
    animal: hare
spec:
  replicas: 2
  selector:
    matchLabels:
      app: animals
      task: hare
  template:
    metadata:
      labels:
        app: animals
        task: hare
        version: v0.0.1
    spec:
      containers:
      - name: hare
        image: supergiantkir/animals:hare
        ports:
        - containerPort: 80

已创建服务,但未创建入口负载均衡器:

但是,如果我删除 kubernetes.io/ingress.class: traefik 行,它会与 Kubernetes 的默认入口一起工作

您可以尝试添加更多注释如下

traefik.ingress.kubernetes.io/frontend-entry-points: http,https
traefik.ingress.kubernetes.io/redirect-entry-point: https
traefik.ingress.kubernetes.io/redirect-permanent: "true"

像这样,

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-dashboard-ingress
  namespace: traefik
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/frontend-entry-points: http,https
    traefik.ingress.kubernetes.io/redirect-entry-point: https
    traefik.ingress.kubernetes.io/redirect-permanent: "true"
spec:
  rules:
  - host: traefik-ui.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: traefik-dashboard
          servicePort: 8080

默认情况下,Traefik 不会为您创建负载均衡器。

HTTP(s) load balancing with Ingress 文档所述:

When you create an Ingress object, the GKE ingress controller creates a Google Cloud Platform HTTP(S) load balancer and configures it according to the information in the Ingress and its associated Services.

这全部适用于 GKE 入口控制器 (gce) - 有关 gce 的更多信息,您可以在此处找到:https://github.com/kubernetes/ingress-gce

如果您想使用 Traefik 作为入口 - 您必须使用 type: LoadBalancer

公开 Traefik 服务

示例:

apiVersion: v1
kind: Service
metadata:
  name: traefik
spec:
  type: LoadBalancer
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  - port: 80
    targetPort: 80

您可以在 Exposing Kubernetes Services to the internet using Traefik Ingress Controller 文章中找到包含大量解释图和实际工作示例的更多信息。

希望对您有所帮助。