首页 > 解决方案 > Traefik 向除仪表板以外的任何地方显示 404 - Metallb

问题描述

我尝试使用 traefik 设置入口,但没有运气。我不会只使用 TLS 端口 80。我有一个端口为 8080 的服务。如果我从集群内部 curl 到该服务,它工作得很好。我得到了 HTTP/200。但是,如果我要从外部连接到他的路径,它就不起作用。Traefik 仪表板在端口 8080 上运行良好

我使用以下设置

特雷菲克:1.7.7

kind: Deployment
apiVersion: apps/v1
metadata:
  name: traefik-ingress-controller
  namespace: default
  labels:
    k8s-app: traefik-ingress-lb
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik:v1.7.7
        name: traefik-ingress-lb
        ports:
        - name: http
          containerPort: 80
        - name: admin
          containerPort: 8080
        args:
        - --api
        - --web
        - --kubernetes
        - --logLevel=DEBUG

---
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: default
  annotations:
    metallb.universe.tf/address-pool: mmas-ip-space
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - protocol: TCP
      port: 80
      name: web
    - protocol: TCP
      port: 8080
      name: admin
  type: LoadBalancer

我有一个在端口 8080 上运行的服务,我为它创建了一个入口规则。这是一个测试服务

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: webmust-ing
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
    - http:
        paths:
        - path: /helloservice
          backend:
            serviceName: hellok8s-service
            servicePort: 8080

我得到 404 与 curl 到 /helloservice 或尝试从浏览器打开

curl -v http://10.24.33.32/helloservice
curl -v http://10.24.33.32:8080/helloservice

如果直接在集群内部 curl 到服务的 IP 地址,我会得到 200/OK

curl -v http://10.100.168.2:8080

NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
hellok8s-service          ClusterIP      10.100.168.2     <none>        8080/TCP                      5d7h

猫 helloservice.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hellok8s-deployment
  labels:
    app: hellok8s
spec:
  selector:
    matchLabels:
      app: hellok8s
  template:
    metadata:
      labels:
        app: hellok8s
    spec:
      containers:
      - name: hellok8s
        image: docker.io/rlkamradt/hellok8s:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: hellok8s-service
spec:
  type: ClusterIP
  selector:
    app: hellok8s
  ports:
  - port: 8080
    targetPort: 8080

标签: kuberneteskubernetes-ingresstraefik-ingressmetallb

解决方案


最后,我通过入口中的以下更改解决了这个问题。

annotations: 
    ingress.kubernetes.io/protocol: http 
    traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip 

推荐阅读