裸金属部署K3S访问内部服务资源的最简方案咨询
裸金属K3S免单服务端口转发访问内部服务方案
绝对最简方案(零额外组件部署,5分钟配置完成)
K3S默认预装的Traefik Ingress控制器本身已经以hostNetwork模式的DaemonSet运行在所有集群节点上,直接监听节点的80、443端口,完全不需要云负载均衡支持,也不用额外部署任何组件,直接用就可以。
操作步骤非常简单:
- 为所有需要访问的内部服务(Loki、Traefik Dashboard、Grafana等)创建标准Ingress资源,为每个服务分配一个独立的内网域名,比如
loki.internal、traefik.internal,Ingress直接使用默认的Traefik IngressClass即可。 - 在你的办公终端或者内网DNS服务上,把上述自定义的内网域名解析到K3S集群任意一个(或多个)节点的内网IP地址:单节点测试直接改本地hosts文件,多用户用就加内网DNS的A记录。
- 如果需要限制访问来源,直接在Traefik上配置IP白名单中间件,绑定到对应Ingress上,只放通信任的内网IP段即可,无需额外搭VPN。
以下是Traefik Dashboard的Ingress配置示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: traefik-admin namespace: kube-system annotations: traefik.ingress.kubernetes.io/router.entrypoints: web spec: rules: - host: traefik.internal http: paths: - path: / pathType: Prefix backend: service: name: traefik port: number: 9000
注意:裸金属环境下Traefik对应的LoadBalancer类型Service会一直显示Pending状态,这是正常现象,不影响80/443端口的流量转发,因为DaemonSet已经直接绑定了宿主机端口,不需要Service额外转发。
若需要LoadBalancer能力的选型建议
如果你有场景必须使用LoadBalancer类型的Service,按轻量化优先级选:
- 首选K3S官方内置的Klipper LB:本身就是为裸金属/边缘场景设计,默认已经集成在K3S里,不需要额外部署,会自动为LoadBalancer类型Service分配节点端口、配置宿主机路由,直接访问节点IP即可对应到服务,资源占用极低。
- 次选MetalLB:如果需要独立的LoadBalancer IP池,选MetalLB的二层模式即可,不需要依赖外部硬件交换机支持,在内网段划一段空闲IP做地址池就能用,配置也很简单,只是资源占用比Klipper高,非必要不选。
不推荐的冗余方案
不建议纯内网访问场景下专门部署绑定VPN接口的第二套Ingress控制器,只有当你需要在外网非内网环境安全访问内部服务时,再考虑这类方案,否则只会增加额外的维护成本。
内容的提问来源于stack exchange,提问作者stewbert
相关产品推荐
相关产品推荐

