即使 CLI `expose` 功能有效,Kubernetes 的 LoadBalancer yaml 也无法正常工作

Kubernetes's LoadBalancer yaml not working even though CLI `expose` function works

这是我在 minikube:

上 运行 的 ServiceDeployment 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>