如何在 K3s 上使用 Traefik 将端口 80 转发到服务端口 3000?

How do I forward port 80 to a service port 3000 using Traefik on K3s?

这是关于 Traefik 的,而不是关于它与 K3s Kubernetes 的一般工作方式,所以请不要给我一个通用的 K8s回答。

我有一个简单的 k3s 部署和服务,如下所示...

apiVersion: v1
kind: Service
metadata:
  labels:
    app: hello-express
  name: app-tier
spec:
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
  selector:
    tier: app

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-express-deployment
  labels:
    app: hello-express
    tier: app
spec:
  replicas: 1
  selector:
    matchLabels:
      tier: app
  template:
    metadata:
      labels:
        app: hello-express
        tier: app
    spec:
      containers:
        - name: server
          image: partyk1d24/hello-express:latest
          ports:
            - containerPort: 3000

然后我可以使用外部 ip 和端口 3000 访问应用程序。现在我想将该端口从 3000 更改为 80。显然这是在 K3s 上使用 Traefik 在本地控制的。我在 looking here...

时尝试了以下操作
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-express-ingress
  annotations:
    kubernetes.io/ingress.class: "traefik"
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: app-tier
                port:
                  number: 80

但是当我尝试访问该站点时,我得到...

curl 192.168.X.XXX      
Service Unavailable% 

博客有点老,所以我确定我做错了什么,谁能帮我识别一下?

您应该将服务端口更改为 80。

  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

保持目标端口为 3000。