无法从 tailscale、漏斗和 k8s 访问 http 应用程序

问题描述 投票:0回答:1

我得到一个 http 应用程序(用 Rust 编写),它在端口 3000:

上提供 2 条路由
  1. /
    ,用于提供静态文件
  2. /health
    ,返回一个简单的字符串:“Ok”

测试时,一切正常,两条路由都可以从本地主机访问。

我对我的应用程序进行了 dockerise,公开端口 3000,一切都按预期工作。

我用

helm create
创建了一个图表。

我的部署端口如下所示:

ports:
  - name: http
    containerPort: 3000
    protocol: TCP

我的服务是

 spec:
  type: ClusterIP
  ports:
    - port: 443
      targetPort: http
      protocol: TCP
      name: http

由于入口的原因,我将 443 设置为端口。

现在我使用带有 VPN(Tailscale)的入口来通过漏斗公开我的服务

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    tailscale.com/funnel: "true"
spec:
  ingressClassName: tailscale
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: mysvc
            port:
              number: 443

所有 pod 都在运行,我可以在入口描述中看到后端

mysvc:443
带有 ip。

我尝试使用curl 和tailnet 名称到达我的http

/health
路线:
curl -v subroute.tailnetname.ts.net:443/health

但我明白:

Host speedupdate.marlin-atlas.ts.net:443 was resolved.
* IPv6: 2a00:dd80:3a::131
* IPv4: 176.58.88.82
*   Trying 176.58.88.82:443...
* Connected to speedupdate.marlin-atlas.ts.net (176.58.88.82) port 443
> GET /health HTTP/1.1
> Host: speedupdate.marlin-atlas.ts.net:443
> User-Agent: curl/8.6.0
> Accept: */*
>
* Empty reply from server
* Closing connection

我不明白为什么?预期答案是字符串

Ok

我检查了 tailscale 创建的代理 pod,没有得到错误日志,也没有 http 调用日志。

那么有什么问题吗?

kubernetes kubernetes-ingress tailscale
1个回答
0
投票

看来您遇到的问题与尾部漏斗的 Ingress 设置方式有关。

按照以下步骤,您将能够定位并修复您的HTTP应用程序入口访问的问题。

根据现有的 Github 功能请求 默认情况下,Tailscale Serve 可以非常轻松地通过 HTTPS 为 tailnet 提供本地服务

虽然 Ingress 规则针对端口 443,但您的服务在内部公开端口 3000。尽管您可能使用 Tail Scale 进行 TLS 终止的端口,但 Ingress 和您的服务之间的通信应在端口 3000 上进行。因此,将 Ingress 规则的后端服务端口号列更改为 3000。

这可以保证来自 Ingress 的流量被路由到您的服务上的端口 3000,您的应用程序正在侦听该端口。再次验证Tail Scale Funnel 设置是否已配置为将端口 443 (HTTPS) 上的流量转发到内部服务端口 3000 (HTTP)。

请参阅关于 kubernetes-operator 的 Tailscale 文档,其中对此有特别指导。确保您的活性或就绪状态探测器已设置为监控端口 3000 上应用程序的运行状况。

尝试利用 curl localhost:3000/health 直接从 K8S 集群内访问应用程序,并使用 kubectl exec 进入 pod,以确定问题是否出在您的应用程序或 Ingress 设置上。

另请查看官方 tailscale 故障排除文档,这可能有助于解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.