faq,

Service Mesh - Kubernetes LoadBalancer Service External IP 一直处于 pending 状态

Read in English

问题现象

如果你使用自建的 Kubernetes 集群(minikubekubeadm 等)。在这种情况下,没有集成 LoadBalancer(与 AWS、Google Cloud、阿里云等云厂商不同)。使用此默认设置,你只能使用 NodePortIngress Controller

这时,如果你部署 LoadBalancer 则会出现 External-IP 一直处于 pending 的问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ cat <<EOF | kubectl apply -f -
kind: Service
apiVersion: v1
metadata:
  name: nginx-ils-service
spec:
  ports:
    - name: http
      port: 80
      nodePort: 30062
  selector:
    app: nginx
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
          - containerPort: 80
  selector:
    matchLabels:
      app: nginx
EOF
1
2
3
4
$ kubectl get service
NAME                TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes          ClusterIP      10.96.0.1      <none>        443/TCP        11m
nginx-ils-service   LoadBalancer   10.98.76.166   <pending>     80:30062/TCP   2m1s

解决方法

minikube

如果你使用的是 minikube,官方提供了如下便捷的解决方法:

1
2
3
4
5
6
7
8
9
10
11
$ minikube tunnel
Status:
	machine: minikube
	pid: 22554
	route: 10.96.0.0/12 -> 192.168.64.3
	minikube: Running
	services: [nginx-ils-service]
    errors:
		minikube: no errors
		router: no errors
		loadbalancer emulator: no errors

执行完命令,External-IP 很快就会出现,详见 https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel

1
2
3
4
$ kubectl get service
NAME                TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
kubernetes          ClusterIP      10.96.0.1      <none>         443/TCP        13m
nginx-ils-service   LoadBalancer   10.98.76.166   10.98.76.166   80:30062/TCP   3m26s

浏览器访问 EXTERNAL-IP,验证

kubeadm

如果是使用的是 kubeadm,可以参考 使用 kubeadm 和 MetalLB 搭建 Kubernetes & Istio 环境 使用 MetalLB 来解决本问题。

参考链接

CatchZeng
Written by CatchZeng Follow
AI (Machine Learning) and DevOps enthusiast.