如何在 Kubernetes 中公开外部 ip?

A.D*_*mas 3 kubernetes kubernetes-service

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

考虑我的树

.                                                                                                                                                                            
??? deployment.yaml                                                                                                                                                          
??? Dockerfile                                                                                                                                                               
??? server.js                                                                                                                                                                
??? service.yaml    
Run Code Online (Sandbox Code Playgroud)

我在本地构建了我的 docker 镜像,并且能够通过

kubectl create -f deployment.yaml 
kubectl create -f service.yaml 
Run Code Online (Sandbox Code Playgroud)

. 但是当我跑

 $ 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
Run Code Online (Sandbox Code Playgroud)

没有外部 ip 可以连接到集群。试图暴露一个 pod,但外部 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
Run Code Online (Sandbox Code Playgroud)

 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);
Run Code Online (Sandbox Code Playgroud)

Pra*_*ati 5

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

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

指定类型NodePort提到这里,该服务将在Minikube端口上被曝光。然后可以使用来自主机操作系统的 url 访问该服务。

minikube 服务 nodeapp --url