如何将本地k8s集群上运行的应用程序公开给本地计算机



我正在k3d Kubernetes集群上本地部署这个项目(GitHub(。它包括一个Helm图表。这里还有一个关于这个例子的文档。

到目前为止,我所做的是以下内容。它工作得很好。问题是它提供的ClusterIP是k8s的内部,我无法在集群之外访问它们。我想要的是能够在我机器的浏览器上运行它们。有人告诉我,我需要一个节点端口或负载均衡器来实现这一点。我该怎么做?

// Build Docker Images
// Navigate to root directory -> ./ProtoClusterTutorial
docker build . -t proto-cluster-tutorial:1.0.0
// Navigate to root directory
docker build -f ./SmartBulbSimulatorApp/Dockerfile . -t smart-bulb-simulator:1.0.0
// Push Docker Image to Docker Hub
docker tag proto-cluster-tutorial:1.0.0 hulkstance/proto-cluster-tutorial:1.0.0
docker push hulkstance/proto-cluster-tutorial:1.0.0
docker tag smart-bulb-simulator:1.0.0 hulkstance/smart-bulb-simulator:1.0.0
docker push hulkstance/smart-bulb-simulator:1.0.0
// List Docker Images
docker images
// Deployment to Kubernetes cluster
helm install proto-cluster-tutorial chart-tutorial
helm install simulator chart-tutorial --values .simulator-values.yaml
// It might fail with the following message:
// Error: INSTALLATION FAILED: Kubernetes cluster unreachable: Get "https://host.docker.internal:64285/version": dial tcp 172.16.1.131:64285: connectex: No connection could be made because the target machine actively refused it.
// which means we don't have a running Kubernetes cluster. We need to create one:
k3d cluster create two-node-cluster --agents 2
// If we want to switch between clusters:
kubectl config use-context k3d-two-node-cluster
// Confirm everything is okay
kubectl get pods
kubectl logs proto-cluster-tutorial-78b5db564c-jrz26

您可以使用kubectl port-forward命令
语法:

kubectl port-forward TYPE/NAME [options] LOCAL_PORT:REMOTE_PORT

在您的情况下:

kubectl port-forward pod/proto-cluster-tutorial-78b5db564c-jrz26 8181:PORT_OF_POD

现在,您可以访问localhost:8181进行使用。

我建议您按照k3d的官方文档来公开服务。

使用ingressnodeport方法。

这完全取决于您的用例。如果您在本地机器上进行测试,您可能需要使用portfowrd命令kubectl port-forward <pod-name> <localport>:<remoteport>

如果您使用Minikube,则使用minikube service <service-name> --url

如果您使用的是像AKS、GKE或EKS这样的云提供商,那么您可能需要考虑使用其他访问应用程序的方式——这可以通过使用NodePort、LoadBalancer或Ingress来完成。

如果您使用Nodeport的服务类型,也可以实现同样的效果。但在Nodeport服务的情况下,它支持的所有端口范围都是30000-32767,这是一个很难记住端口号的数字。Nodeport服务的另一个缺点是Node的IP地址(如果节点重新启动,它会更改(,因此这不用于项目目的。

创建NodePort服务:节点端口服务

LoadBalancer服务公开一个外部IP,然后您可以使用访问该服务:但如果您有100个服务,您将被收取100个外部IP的费用,这会阻碍预算。

在Kubernetes上创建负载平衡器服务:负载平衡器服务

公开应用程序的另一种方式是使用ingress-controller来实现同样的目的。使用ingress,您可以使用一个外部IP公开100个应用程序。您需要安装ingress控制器,然后使用ingress文件来配置规则。

在Kubernetes上设置入口控制器:入口控制器

相关内容

最新更新