分类

链接

2025 年 7 月
 123456
78910111213
14151617181920
21222324252627
28293031  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > DevOps, Docker, k8s > 正文
共享办公室出租
利用k8s ingress访问非POD服务
DevOps, Docker, k8s 暂无评论 阅读(53)
我要访问k8s.peos.cn自动转发到8080端口上面,因为我的web端口是8080

 最终解决方案:让 k8s.peos.cn 自动转发到 8080 端口


1. 问题本质

  • 你的 Web 服务监听 8080 端口,但希望用户访问 http://k8s.peos.cn(默认 80 端口)时自动转发到 8080。
  • ExternalName Service 无法实现端口转换,因为它只做 DNS 映射(CNAME),不涉及流量代理。

2. 正确架构(推荐)

使用 Traefik IngressRoute + Service + Endpoints 实现:
  1. Service 作为流量入口(监听 80 端口)。
  2. Endpoints 直接指向节点 IP 和 8080 端口。
  3. IngressRoute 将域名 k8s.peos.cn 路由到该 Service。

3. 完整配置步骤

① 创建 Service(无选择器)

yaml

复制
apiVersion: v1
kind: Service
metadata:
  name: kuboard-web
  namespace: default
spec:
  ports:
    - port: 8080          # 集群内访问端口(用户访问的端口)
      targetPort: 8080  # 实际转发到 8080
  type: ClusterIP

 

② 创建 Endpoints(手动绑定节点 IP + 8080)

apiVersion: v1
kind: Endpoints
metadata:
  name: kuboard-web     # 必须与 Service 同名
subsets:
  - addresses:
      - ip: 192.168.2.220  # 节点实际 IP
    ports:
      - port: 8080         # Web 服务端口

 

③ 创建 IngressRoute(域名路由规则)

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: k8s.peos.cn
  namespace: default
  resourceVersion: '12474'
spec:
  ingressClassName: traefik
  rules:
    - host: k8s.peos.cn
      http:
        paths:
          - backend:
              service:
                name: kuboard-web
                port:
                  number: 8080
            path: /
            pathType: Prefix
status:
  loadBalancer:
    ingress:
      - ip: 192.168.2.220

 


4. 验证方法

  1. 检查 Service 和 Endpoints 是否绑定
    bash

    复制
    kubectl get svc kuboard-web
    kubectl get endpoints kuboard-web
    • 确认 Endpoints 显示节点 IP 和 8080 端口。
  2. 测试访问
    bash

    复制
    <span class="token function">curl</span> <span class="token parameter variable">-v</span> http://k8s.peos.cn
    • 应返回 Web 服务的 8080 端口内容。

5. 关键注意事项

  • 防火墙:确保节点防火墙放行 8080 端口(ufw allow 8080iptables)。
  • DNS:确认 k8s.peos.cn 解析到 Traefik 入口的节点 IP。
  • 端口冲突:节点 80 端口未被其他服务占用(Traefik 默认监听 80/443)。

6. 为什么不用 ExternalName?

  • ExternalName 只做 DNS 重定向(CNAME),无法修改端口
  • 用户访问 http://k8s.peos.cn(80 端口)时,流量不会自动转发到 8080,必须显式访问 http://k8s.peos.cn:8080(不符合需求)。

✅ 最终效果

  • 用户访问 http://k8s.peos.cn → Traefik 接收 80 端口请求 → 转发到 Service → 通过 Endpoints 到达节点 8080 端口 → 返回 Web 服务响应。
  • 完全透明,用户无需手动输入端口号。

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:利用k8s ingress访问非POD服务 | Bruce's Blog

发表评论

留言无头像?