我想用minikube公开我的kubernetes集群。
考虑我的树
.
├── deployment.yaml
├── Dockerfile
├── server.js
└── service.yaml
我在本地构建docker映像,并能够通过
运行所有Podkubectl 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可以连接到群集。尝试公开一个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
和
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);
答案 0 :(得分:4)
根据K8S文档here。因此,type=LoadBalancer
可以在AWS,GCP和其他受支持的云上使用,而不能在Minikube上使用。
在支持外部负载均衡器的云提供商上,将类型字段设置为LoadBalancer将为您的服务提供负载均衡器。
按here的类型指定为NodePort,该服务将在Minikube的端口上公开。然后可以使用主机操作系统中的URL访问该服务。
minikube服务nodeapp --url
答案 1 :(得分:2)
使用metallb项目https://github.com/google/metallb
可以在minikube中实现负载平衡器类型的服务。这使您不仅可以通过云提供商,还可以在minikube中离线使用外部ip。
祝你好运!
答案 2 :(得分:0)
如果运行以下命令:
kubectl expose deployment nodeapp --type=NodePort
然后运行:
kubectl get services
它应该向您显示服务及其公开的端口。
您可以使用以下方法获取Minikube IP:
curl $(minikube service nodeapp --url)