我已经在一组Raspberry Pi4计算机上构建了一个K3s(https://k3s.io)集群。
控制器(ctrl-1
)节点是网关,因为它具有2个网络接口。一个连接到我的局域网,另一个连接到它创建的网络,例如K3S-LAN。两个节点(node-1
和node-2
)已部署到K3S-LAN。
我希望能够通过ctrl-1
访问在节点上运行的应用程序,例如从局域网。这是因为该群集具有可移植性,因此仅ctrl-1
节点需要连接到来宾LAN。 (是的,DNS名称等有待解决的问题,但我想让基础知识先运行。)
这意味着我需要能够通过ctrl-1
“代理”入口。我以为我有一个正确的主意,就是我使用Helm将“ nginx-ingress”部署到了主机上。但是我忘了为此服务-它已经安排在节点上,而它需要在控制器上,以便打开端口(我认为)。但是我找不到如何使服务在控制器上运行。
目前,我运行的服务类型为NodePort
。我可以安装MetalLB,以便具有LoadBalancer
功能。但是,根据我所看到的情况,我不确定这是否会有所帮助。
ctrl-1
上没有任何污点,只是主角色。
我在这里吠错树了吗?我想这可能不是Kubernetes的预期用例,但我正在研究一个想法。感谢人们的想法。
更新*
我只是想解决此问题的方法可能是在ctrl-1
上运行HAProxy(作为主机上的另一项服务),并设置规则以代理群集中的必要服务。那将充当网络之间的桥梁。
答案 0 :(得分:1)
您只需要通过Nodeport类型服务公开您的Pod,就可以通过http://master-node-ip:nodeport对其进行访问。确保kube-proxy在所有主节点和辅助节点上运行。
只要在主服务器上运行kube-proxy,入口方法也应该起作用。您在群集上部署了nginx入口,它将被部署到工作节点中。然后,您可以使用NodePort服务公开nginx入口控制器本身。之后,您可以创建用于配置nginx入口控制器的入口资源,以将流量路由到在工作节点上运行的后端Pod和服务。后端Pod的服务应为ClusterIP类型。
部署nginx入口控制器,并使用kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/provider/baremetal/service-nodeport.yaml
部署nginx pod(nginx是一个示例。这应该是您的pod)kubectl run nginx --generator=run-pod/v1 --image=nginx
通过ClusterIP服务公开nginx Pod
apiVersion: v1
kind: Service
metadata:
labels:
run: nginx
name: nginx-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
创建入口资源
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mycha-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: nginx-service
servicePort: 80
通过上述设置,我现在可以访问nginx并通过http://master-node-ip:NodePort of nginx ingress controller
获取“欢迎使用nginx!”