почему traefik показывает, что страница 404 не найдена при доступе с помощью команды curl на хосте - PullRequest
0 голосов
/ 30 марта 2020

Я развернул traefik v2.1.6, используя этот yaml:

apiVersion: v1
kind: Service
metadata:
  name: traefik
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: '8080'
spec:
  ports:
    - name: web
      port: 80
    - name: websecure
      port: 443
    - name: metrics
      port: 8080
  selector:
    app: traefik
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: traefik-ingress-controller
  labels:
    app: traefik
spec:
  selector:
    matchLabels:
      app: traefik
  template:
    metadata:
      name: traefik
      labels:
        app: traefik
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 1
      containers:
        - image: traefik:2.1.6
          name: traefik-ingress-lb
          ports:
            - name: web
              containerPort: 80
              hostPort: 80           #hostPort方式,将端口暴露到集群节点
            - name: websecure
              containerPort: 443
              hostPort: 443          #hostPort方式,将端口暴露到集群节点
            - name: metrics
              containerPort: 8080
          resources:
            limits:
              cpu: 2000m
              memory: 1024Mi
            requests:
              cpu: 1000m
              memory: 1024Mi
          securityContext:
            capabilities:
              drop:
                - ALL
              add:
                - NET_BIND_SERVICE
          envFrom:
            - secretRef:
                name: traefik-alidns-secret
          args:
            - --configfile=/config/traefik.yaml
            - --logLevel=INFO
            - --metrics=true
            - --metrics.prometheus=true
            - --entryPoints.metrics.address=:8080
            - --metrics.prometheus.entryPoint=metrics
            - --metrics.prometheus.addServicesLabels=true
            - --metrics.prometheus.addEntryPointsLabels=true
            - --metrics.prometheus.buckets=0.100000, 0.300000, 1.200000, 5.000000
            # HTTPS证书配置
            - --entryPoints.web.address=:80
            - --entryPoints.websecure.address=:443
            # 邮箱配置
            - --certificatesResolvers.default.acme.email=jiangtingqiang@gmail.com
            # 保存 ACME 证书的位置
            - --certificatesResolvers.default.acme.storage=/config/acme.json
            - --certificatesResolvers.default.acme.httpChallenge.entryPoint=web
            # 下面是用于测试的ca服务,如果https证书生成成功了,则移除下面参数
            - --certificatesResolvers.default.acme.dnsChallenge.provider=alidns
            - --certificatesResolvers.default.acme.dnsChallenge=true
            - --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
          volumeMounts:
            - mountPath: "/config"
              name: "config"
      volumes:
        - name: config
          configMap:
            name: traefik-config 
      tolerations:              #设置容忍所有污点,防止节点被设置污点
        - operator: "Exists"
      nodeSelector:             #设置node筛选器,在特定label的节点上启动
        app-type: "online-app"

успех запуска службы:

$ k get daemonset -n kube-system
NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR         AGE
traefik-ingress-controller   1         1         1       1            1           app-type=online-app   61d

Но когда я получаю доступ к treafik с помощью этой команды, он показывает 404 не найдено:

[root@fat001 ~]# curl -k --header 'Host:traefik.example.com' https://172.19.104.230
404 page not found

172.19.104.230 - это граничный узел кластера kubernetes (v1.15.2), запускающий traefik, что я должен сделать, чтобы получить доступ к успеху traefik? Это вывод описания модуля:

$ k describe pod traefik-ingress-controller-t4rmx -n kube-system
Name:           traefik-ingress-controller-t4rmx
Namespace:      kube-system
Priority:       0
Node:           azshara-k8s02/172.19.104.230
Start Time:     Tue, 31 Mar 2020 00:14:38 +0800
Labels:         app=traefik
                controller-revision-hash=547587d6d5
                pod-template-generation=44
Annotations:    <none>
Status:         Running
IP:             172.30.208.18
IPs:            <none>
Controlled By:  DaemonSet/traefik-ingress-controller
Containers:
  traefik-ingress-lb:
    Container ID:  docker://88b74826c5e380e00a53d2d4741ab6b74d8628412275f062dda861ad26681971
    Image:         traefik:2.1.6
    Image ID:      docker-pullable://traefik@sha256:13c5e62a0757bd8bf57c8c36575f7686f06186994ad6d2bda773ed8f140415c2
    Ports:         80/TCP, 443/TCP, 8080/TCP
    Host Ports:    80/TCP, 443/TCP, 0/TCP
    Args:
      --configfile=/config/traefik.yaml
      --logLevel=INFO
      --metrics=true
      --metrics.prometheus=true
      --entryPoints.metrics.address=:8080
      --metrics.prometheus.entryPoint=metrics
      --metrics.prometheus.addServicesLabels=true
      --metrics.prometheus.addEntryPointsLabels=true
      --metrics.prometheus.buckets=0.100000, 0.300000, 1.200000, 5.000000
      --entryPoints.web.address=:80
      --entryPoints.websecure.address=:443
      --certificatesResolvers.default.acme.email=jiangtingqiang@gmail.com
      --certificatesResolvers.default.acme.storage=/config/acme.json
      --certificatesResolvers.default.acme.httpChallenge.entryPoint=web
      --certificatesResolvers.default.acme.dnsChallenge.provider=alidns
      --certificatesResolvers.default.acme.dnsChallenge=true
      --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
    State:          Running
      Started:      Tue, 31 Mar 2020 00:14:39 +0800
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     2
      memory:  1Gi
    Requests:
      cpu:     1
      memory:  1Gi
    Environment Variables from:
      traefik-alidns-secret  Secret  Optional: false
    Environment:             <none>
    Mounts:
      /config from config (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from traefik-ingress-controller-token-92vsc (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      traefik-config
    Optional:  false
  traefik-ingress-controller-token-92vsc:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  traefik-ingress-controller-token-92vsc
    Optional:    false
QoS Class:       Burstable
Node-Selectors:  app-type=online-app
Tolerations:
                 node.kubernetes.io/disk-pressure:NoSchedule
                 node.kubernetes.io/memory-pressure:NoSchedule
                 node.kubernetes.io/not-ready:NoExecute
                 node.kubernetes.io/pid-pressure:NoSchedule
                 node.kubernetes.io/unreachable:NoExecute
                 node.kubernetes.io/unschedulable:NoSchedule
Events:
  Type    Reason     Age   From                    Message
  ----    ------     ----  ----                    -------
  Normal  Scheduled  102m  default-scheduler       Successfully assigned kube-system/traefik-ingress-controller-t4rmx to azshara-k8s02
  Normal  Pulled     102m  kubelet, azshara-k8s02  Container image "traefik:2.1.6" already present on machine
  Normal  Created    102m  kubelet, azshara-k8s02  Created container traefik-ingress-lb
  Normal  Started    102m  kubelet, azshara-k8s02  Started container traefik-ingress-lb

И это моя конфигурация маршрута treafik:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-dashboard-route
  namespace: kube-system
spec:
  entryPoints:
    - websecure
  tls:
    certResolver: default
  routes:
    - match: Host(`traefik.example.com`) && PathPrefix(`/default`)
      kind: Rule
      services:
        - name: traefik
          port: 8080

curl из контейнера kubernetes работает нормально так:

/ # curl -L traefik.kube-system.svc.cluster.local:8080
<!DOCTYPE html><html><head><title>Traefik</title><meta charset=utf-8><meta name=description content="Traefik UI"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><link rel=icon type=image/png href=statics/app-logo-128x128.png><link rel=icon type=image/png sizes=16x16 href=statics/icons/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=statics/icons/favicon-32x32.png><link rel=icon type=image/png sizes=96x96 href=statics/icons/favicon-96x96.png><link rel=icon type=image/ico href=statics/icons/favicon.ico><link href=css/019be8e4.d05f1162.css rel=prefetch><link href=css/099399dd.9310dd1b.css rel=prefetch><link href=css/0af0fca4.e3d6530d.css rel=prefetch><link href=css/162d302c.9310dd1b.css rel=prefetch><link href=css/29ead7f5.9310dd1b.css rel=prefetch><link href=css/31ad66a3.9310dd1b.css rel=prefetch><link href=css/524389aa.619bfb84.css rel=prefetch><link href=css/61674343.9310dd1b.css rel=prefetch><link href=css/63c47f2b.294d1efb.css rel=prefetch><link href=css/691c1182.ed0ee510.css rel=prefetch><link href=css/7ba452e3.37efe53c.css rel=prefetch><link href=css/87fca1b4.8c8c2eec.css rel=prefetch><link href=js/019be8e4.d8726e8b.js rel=prefetch><link href=js/099399dd.a047d401.js rel=prefetch><link href=js/0af0fca4.271bd48d.js rel=prefetch><link href=js/162d302c.ce1f9159.js rel=prefetch><link href=js/29ead7f5.cd022784.js rel=prefetch><link href=js/2d21e8fd.f3d2bb6c.js rel=prefetch><link href=js/31ad66a3.12ab3f06.js rel=prefetch><link href=js/524389aa.21dfc9ee.js rel=prefetch><link href=js/61674343.adb358dd.js rel=prefetch><link href=js/63c47f2b.caf9b4a2.js rel=prefetch><link href=js/691c1182.5d4aa4c9.js rel=prefetch><link href=js/7ba452e3.71a69a60.js rel=prefetch><link href=js/87fca1b4.ac9c2dc6.js rel=prefetch><link href=css/app.e4fba3f1.css rel=preload as=style><link href=js/app.841031a8.js rel=preload as=script><link href=js/vendor.49a1849c.js rel=preload as=script><link href=css/app.e4fba3f1.css rel=stylesheet><link rel=manifest href=manifest.json><meta name=theme-color content=#027be3><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=default><meta name=apple-mobile-web-app-title content=Traefik><link rel=apple-touch-icon href=statics/icons/apple-icon-120x120.png><link rel=apple-touch-icon sizes=180x180 href=statics/icons/apple-icon-180x180.png><link rel=apple-touch-icon sizes=152x152 href=statics/icons/apple-icon-152x152.png><link rel=apple-touch-icon sizes=167x167 href=statics/icons/apple-icon-167x167.png><link rel=mask-icon href=statics/icons/safari-pinned-tab.svg color=#027be3><meta name=msapplication-TileImage content=statics/icons/ms-icon-144x144.png><meta name=msapplication-TileColor content=#000000></head><body><div id=q-app></div><script type=text/javascript src=js/app.841031a8.js></script><script type=text/javascript src=js/vendor.49a1849c.js></script></body></html>/ #

Свернуть с хоста не удалось:

[root@fat001 ~]# curl -k --header 'Host:traefik.example.com' https://172.19.104.230
404 page not found
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...