Blazor 服务器通过 k8s 入口控制器

时间:2021-03-15 10:16:31

标签: kubernetes kubernetes-ingress traefik-ingress

我编写了一个小型 Blazor 应用程序,它在容器化和通过 k3s 端口转发访问时看起来都运行良好,但正在努力寻找有关如何正确通过以下方式公开该应用程序的指南入口控制器。要显示这一点:

  • 如果我运行 Blazor 应用程序并通过端口转发进行访问(blazor 路由运行良好等):
<块引用>

kubectl 端口转发部署/8000:80

blazor approot

和页面路由按预期工作

blazor application

  • 但是,当我向部署添加 clusterIP 服务并通过 Traefik 入口控制器连接到它时,我得到:

blazor ingressroot

并且更改路由将导致 404 page not found 错误

blazor ingressroute

我的入口 serviceIp 和入口控制器设置:

  • 集群IP:
apiVersion: v1
kind: Service
metadata:
  name: driverpassthrough
spec:
  selector:
    app: driverpassthrough
  ports:
  - name: ui
    protocol: TCP
    port: 8010
    targetPort: 80
  • 入口
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-test
  annotations:
    kubernetes.io/ingress.class: "traefik"
    traefik.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
        - path: /passthrough
          backend:
            serviceName: driverpassthrough
            servicePort: 8010

1 个答案:

答案 0 :(得分:0)

所以就我而言,我使用 k3s 和 traefik。我还有 blazor 服务器应用程序的 3 个副本。为了使它工作,我必须像这样在集群 ip 上启用粘性会话(在注释中):

服务
apiVersion: v1
kind: Service
metadata:
  name: qscale-healthcheck-service
  annotations:
    traefik.ingress.kubernetes.io/affinity: "true"
  labels:
    name: qscale-healthcheck-service
spec:
  type: ClusterIP
  selector:
    app: healthcheck
  ports:
    - name: http
      port: 80
      targetPort: 80
入口
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: traefik-ingress
  annotations:
    kubernetes.io/ingress.class: "traefik"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: qscale-healthcheck-service
          servicePort: 80

这是我找到注释的链接:Traefik Doc