3

我想用 minikube 公开我的 kubernetes 集群。

考虑我的树

.                                                                                                                                                                            
├── deployment.yaml                                                                                                                                                          
├── Dockerfile                                                                                                                                                               
├── server.js                                                                                                                                                                
└── service.yaml    

我在本地构建我的 docker 映像,并且能够通过以下方式运行所有 pod

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

没有外部 ip 可以连接到集群。试图暴露一个吊舱,但外部 IP 保持不变。为什么没有外部IP?

 $ 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);
4

3 回答 3

5

根据此处的 K8S 文档。因此,type=LoadBalancer可以在 AWS、GCP 和其他支持的云上使用,而不是在 Minikube 上。

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

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

minikube 服务 nodeapp --url

于 2018-10-02T15:46:04.663 回答
3

可以使用 metallb 项目https://github.com/google/metallb在 minikube 中实现负载均衡器类型的服务

这使您可以离线和在 minikube 中使用外部 ip,而不仅仅是使用云提供商。

祝你好运!

于 2018-10-02T20:30:26.510 回答
0

如果您运行以下命令:

kubectl expose deployment nodeapp --type=NodePort

然后运行:

kubectl get services

它应该向您显示服务以及它所暴露的端口。

您可以使用以下方法获取 Minikube IP:

curl $(minikube service nodeapp --url)

于 2018-10-02T15:13:25.803 回答