我已经将一个非常简单的节点应用程序部署到了minikube集群中。我创建了Docker映像,并且在容器中时一切正常。当我在k8s集群中构建它时,可以看到部署正在工作。
我试图使用运行“ kubectl get svc”时提供的minikube IP和端口通过负载均衡器访问节点应用程序。我知道我至少在正确地做这部分...
当我尝试访问URL并检查“网络”标签时,请求永远不会完成,而会一直处于待处理状态。
节点应用程序是我做的一个非常简单的API,仅用于测试,因此在尝试访问应用程序时会使用route / posts。它应该返回一些JSON,并且所有这些都可以从容器中获取。在集群中时,一切都停止了工作。
apiVersion: apps/v1
kind: Deployment
metadata:
name: server-deployment
spec:
replicas: 3
selector:
matchLabels:
targets: nodes
template:
metadata:
labels:
targets: nodes
spec:
containers:
- name: server
image: brandonjones085/mean-backend
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: backend-load
spec:
selector:
targets: nodes
ports:
- protocol: "TCP"
port: 3000
targetPort: 3000
type: LoadBalancer
答案 0 :(得分:2)
就像@Hackerman所述,如果您使用LoadBalancer类型的服务,则需要使用minikube tunnel
。您可以遵循example。此类服务通常是指提供提供者负载均衡器,例如AWS ELB。但是在minikube的情况下,没有外部提供程序,您需要欺骗它以为有一个外部提供程序。
基本上,您需要先运行它,然后才能创建展开。
在另一个终端上:
minikube tunnel
然后应用您的清单YAML文件,其中包括您在问题中的定义:
kubectl apply -f <your-deployment>.yaml
✌️</ p>
答案 1 :(得分:1)
除了@Rico答案:还有两种方法可以访问minikube上部署的应用程序。
第一-using NodePort。使用NodePort
服务类型公开应用程序时,您可以通过执行minikube service list
并访问输出显示的URL来访问它-它是minikube ip
和nodeport的结果。输出将类似于以下内容:
|-------------|------------|----------------------------|-----|
| NAMESPACE | NAME | TARGET PORT | URL |
|-------------|------------|----------------------------|-----|
| |
| default | nginx | http://192.168.39.22:30345 |
| |
|-------------|------------|----------------------------|-----|
第二个选项是通过使用minikube tunnel
命令。它将外部IP分配给通过LoadBalancer
服务类型公开的应用程序。尝试访问它时,minikube tunnel
必须正在运行,并且可以在单独的终端中使用externalIP:port
访问它。 minikube tunnel
的示例输出:
$minikube tunnel
Status:
machine: minikube
pid: 9284
route: 10.96.0.0/12 -> 192.168.39.22
minikube: Running
services: [backend-load]
然后,您可以通过运行kubectl get service
检查分配给该服务的外部IP:
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
backend-load LoadBalancer 10.100.120.115 10.100.120.115 3000:31676/TCP 110s
因此在此示例中,可以在10.100.120.115:3000
下访问该应用程序。