【问题标题】:Simplest way to access internal resources in a K3S installation在 K3S 安装中访问内部资源的最简单方法
【发布时间】:2022-06-20 17:20:01
【问题描述】:
前言:我知道这有点重复(这个问题在不同版本中已被多次问过),但我真的找不到关于如何在裸机上处理这个问题的明确答案。
问题:我希望能够访问内部服务,而无需为每个服务进行端口转发。就像访问 loki 或 traefik 仪表板一样。该设置在裸机服务器上运行标准 K3S。大多数答案和指南都集中在基于云的负载均衡器上,但显然我无法使用该选项。
似乎有很多方法可以解决这个问题,但最简单的方法是什么?绑定到 VPN 接口的第二个入口控制器?负载均衡器(哪个?)
非常感谢您的指导!
【问题讨论】:
标签:
kubernetes
networking
k3s
【解决方案1】:
在主机上公开k3s 服务的最简单方法就是创建LoadBalancer 服务。您实际上不需要安装任何类型的负载均衡器;这将在您的主机上公开您的服务端口。
例如,启动一个 pod:
k3s kubectl run --image docker.io/alpinelinux/darkhttpd:latest --port 8080 webtest
创建服务:
k3s kubectl expose pod webtest --target-port 8080 --name webtest --type=LoadBalancer
这让我们得到一个如下所示的清单:
apiVersion: v1
kind: Service
metadata:
labels:
run: webtest
name: webtest
namespace: default
spec:
allocateLoadBalancerNodePorts: true
clusterIP: 10.43.234.34
clusterIPs:
- 10.43.234.34
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- nodePort: 31647
port: 8080
protocol: TCP
targetPort: 8080
selector:
run: webtest
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 192.168.122.136
现在在我的k3s 主机上,我可以:
$ curl localhost:8080
<html>
<head>
<title>/</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
...
或者来自我网络上的其他地方:
$ curl 192.168.1212.136:8080
<html>
<head>
<title>/</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
...
【解决方案2】:
最后,问题在于我的wireguard接口的流量是如何路由到k3s的。修复路由后,我就可以访问暴露的服务了。