如何在Kubernetes中公开外部ip?

如何在Kubernetes中公开外部ip?,kubernetes,kubernetes-service,Kubernetes,Kubernetes Service,我想用minikube公开我的kubernetes集群 想想我的树 . ├── deployment.yaml

我想用minikube公开我的kubernetes集群

想想我的树

.                                                                                                                                                                            
├── deployment.yaml                                                                                                                                                          
├── Dockerfile                                                                                                                                                               
├── server.js                                                                                                                                                                
└── service.yaml    
我在本地建立我的docker映像,并且能够通过

kubectl create -f deployment.yaml 
kubectl create -f service.yaml 
。但是当我跑的时候

 $ kubectl get services                                                                                                                                        
NAME                      TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE                                                                                    
kubernetes                ClusterIP      10.96.0.1       <none>        443/TCP        2h
nodeapp                   LoadBalancer   10.110.106.83   <pending>     80:32711/TCP   9m


如果运行以下命令:

kubectl公开部署nodeapp--type=NodePort

然后运行:

kubectl获取服务

它应该向您显示服务以及它暴露在哪个端口上

您可以通过以下方式获得Minikube IP:


根据K8S文档,curl$(minikube服务nodeapp--url)

。因此,
type=LoadBalancer
可以用于AWS、GCP和其他受支持的云,而不是Minikube

在支持外部负载平衡器的云提供商上,将type字段设置为LoadBalancer将为您的服务提供负载平衡器

如前所述,将类型指定为NodePort,服务将在Minikube上的端口上公开。然后可以使用来自主机操作系统的url访问该服务

minikube服务nodeapp--url


可以使用metallb项目在minikube中实现负载平衡器类型的服务

这允许您脱机和在minikube中使用外部ip,而不仅仅是与云提供商一起使用


祝你好运

谢谢你的提示。curl命令可以工作,但是我仍然看不到公开的IP
type=LoadBalancer
是用于云的。@PraveenSripati实际上,即使在云提供程序之外,您也可以自由使用
type:LoadBalancer
。它将与常规的
NodePort
一样工作,具有完全相同的端点列表,但其
EXTERNAL-IP
将处于状态forever@KonstantinVustin-同意,负载平衡器端口使用使用服务端口的nodeport。但是,最好是明确的。我的2c。如何使用此命令公开命名空间中的部署
kubectl公开部署nodeapp--type=NodePort--namespace=test
?很高兴知道这一点。应包含在官方K8S服务文件中。我的赞成票:)令人沮丧的是,“minikube”不像kubernetes那样支持开箱即用的桌面Docker。后者更易于配置和使用,尽管在k8s更新中速度不如前者快。
 $ cat deployment.yaml                                                                                                                                         
apiVersion: apps/v1                                                                                                                                                          
kind: Deployment
metadata:
  name: nodeapp
  labels:
    app: nodeapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nodeapp
  template:
    metadata:
      labels:
        app: nodeapp
    spec:
      containers:
      - name: hello-node
        image: hello-node:v2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
 cat service.yaml                                                                                                                                            
kind: Service                                                                                                                                                                
apiVersion: v1
metadata:
  name: nodeapp
spec:
  selector:
    app: nodeapp
  ports:
  - name: http 
    port: 80
    targetPort: 3000
    protocol: TCP
  type: LoadBalancer


$ cat server.js                                                                                                                                               
var http = require('http');                                                                                                                                                  

var handleRequest = function(request, response) {
  console.log('Received request for URL: ' + request.url);
  response.writeHead(200);
  response.end('Hello User');
};
var www = http.createServer(handleRequest);