我在一组 Raspberry Pi4 计算机上构建了一个 K3s ( https://k3s.io ) 集群。
Controller (ctrl-1
) 节点是一个网关,因为它有 2 个网络接口(interface)。一个连接到我的 LAN,另一个连接到它创建的网络,例如K3S-局域网。两个节点( node-1
和 node-2
)部署到 K3S-LAN。
我希望能够通过 ctrl-1
访问节点上运行的应用程序,例如从局域网。这是因为这个集群是可移植的,所以只有 ctrl-1
节点需要连接到访客 LAN。 (是的,DNS 名称等问题需要解决,但我想先运行基础知识)。
这意味着我需要能够通过ctrl-1
“代理”入口。 .我认为我对此有正确的想法,因为我使用 Helm 将“nginx-ingress”部署到 master。但是我忘记了这个服务 - 这已经安排在节点上,而它需要在 Controller 上以便打开端口(我认为)。但是我找不到如何使服务在 Controller 上运行。
目前,我的服务类型为 NodePort
.我可以安装 MetalLB 以便拥有 LoadBalancer
能力。但是,根据我所看到的,我不确定这是否有帮助。ctrl-1
没有任何污点设置,只是主人的角色。
我在这里吠错树了吗?我想这可能不是 Kubernetes 的预期用例,但我正在玩一个想法。感谢人们的任何想法。
更新*
我刚刚想到解决这个问题的方法可能是在 ctrl-1
上运行 HAProxy (作为主机上的另一个服务)并设置规则以代理到集群中的必要服务。这将充当网络之间的桥梁。
最佳答案
部署 nginx 入口 Controller 并使用
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/provider/baremetal/service-nodeport.yaml
通过 NodePort 服务公开它部署 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!”
关于kubernetes - 是否可以通过 Kubernetes Controller 节点提供应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59917732/