即使 CLI `expose` 功能有效,Kubernetes 的 LoadBalancer yaml 也无法正常工作
Kubernetes's LoadBalancer yaml not working even though CLI `expose` function works
这是我在 minikube
:
上 运行 的 Service
和 Deployment
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-hello-world
labels:
app: node-hello-world
spec:
replicas: 1
selector:
matchLabels:
app: node-hello-world
template:
metadata:
labels:
app: node-hello-world
spec:
containers:
- name: node-hello-world
image: node-hello-world:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: node-hello-world-load-balancer
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 9000
targetPort: 8080
nodePort: 30002
selector:
name: node-hello-world
结果:
$ minikube service node-hello-world-load-balancer --url
http://192.168.99.101:30002
$ curl http://192.168.99.101:30002
curl: (7) Failed to connect to 192.168.99.101 port 30002: Connection refused
但是,运行 以下 CLI 有效:
$ kubectl expose deployment node-hello-world --type=LoadBalancer
$ minikube service node-hello-world --url
http://192.168.99.101:30130
$ curl http://192.168.99.101:30130
Hello World!
我的 LoadBalancer yaml 配置有什么问题?
您配置的服务选择器有误
selector:
name: node-hello-world
应该是:
selector:
app: node-hello-world
https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/
您可以通过描述服务来调试它,并看到端点列表为空,因此没有 pods 映射到您端点的服务列表
kubectl describe svc node-hello-world-load-balancer | grep -i endpoints
Endpoints: <none>
这是我在 minikube
:
Service
和 Deployment
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-hello-world
labels:
app: node-hello-world
spec:
replicas: 1
selector:
matchLabels:
app: node-hello-world
template:
metadata:
labels:
app: node-hello-world
spec:
containers:
- name: node-hello-world
image: node-hello-world:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: node-hello-world-load-balancer
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 9000
targetPort: 8080
nodePort: 30002
selector:
name: node-hello-world
结果:
$ minikube service node-hello-world-load-balancer --url
http://192.168.99.101:30002
$ curl http://192.168.99.101:30002
curl: (7) Failed to connect to 192.168.99.101 port 30002: Connection refused
但是,运行 以下 CLI 有效:
$ kubectl expose deployment node-hello-world --type=LoadBalancer
$ minikube service node-hello-world --url
http://192.168.99.101:30130
$ curl http://192.168.99.101:30130
Hello World!
我的 LoadBalancer yaml 配置有什么问题?
您配置的服务选择器有误
selector:
name: node-hello-world
应该是:
selector:
app: node-hello-world
https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/
您可以通过描述服务来调试它,并看到端点列表为空,因此没有 pods 映射到您端点的服务列表
kubectl describe svc node-hello-world-load-balancer | grep -i endpoints
Endpoints: <none>