我试图在kubernetes上部署nginx, kubernetes版本是v1.5.2, 我已经部署了nginx的3个副本,YAML文件如下,

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.10
        ports:
        - containerPort: 80

现在我想在节点的30062端口上公开它的80端口,为此我在下面创建了一个服务,

kind: Service
apiVersion: v1
metadata:
  name: nginx-ils-service
spec:
  ports:
    - name: http
      port: 80
      nodePort: 30062
  selector:
    app: nginx
  type: LoadBalancer

这项服务工作得很好,但它不仅在kubernetes仪表板上也在终端上显示为待定。


当前回答

删除现有服务,并创建一个相同的新服务解决了我的问题。我的问题是我定义的负载平衡IP被使用,因此外部端点正在等待。当我改变一个新的负载平衡IP时,它仍然不能工作。

最后,删除现有的服务并创建一个新的服务解决了我的问题。

其他回答

如果你正在使用Minikube,有一个神奇的命令!

$ minikube tunnel

希望有人能节省几分钟的时间。

参考链接 https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel

看起来你正在使用一个定制的Kubernetes集群(使用minikube, kubeadm或类似的)。在这种情况下,没有集成LoadBalancer(不像AWS或谷歌Cloud)。在这个默认设置下,您只能使用NodePort或Ingress Controller。

使用入口控制器,你可以设置一个域名映射到你的pod;如果你使用入口控制器,你不需要给你的服务LoadBalancer类型。

如果使用裸金属,则需要NodePort类型 https://kubernetes.github.io/ingress-nginx/deploy/baremetal/

LoadBalancer默认工作在其他云提供商,如数字海洋,Aws等

k edit service ingress-nginx-controller
type: NodePort

spec:
   externalIPs:
   - xxx.xxx.xxx.xx 

使用公共IP

如果有人正在使用MicroK8s:您需要一个网络负载均衡器。

MicroK8s自带metallb,你可以这样启用它:

microk8s enable metallb

<pending>应该变成一个实际的IP地址。

LoadBalancer ServiceType只有在底层基础设施支持自动创建负载均衡器并在Kubernetes中有各自的支持时才会工作,就像谷歌云平台和AWS一样。如果没有配置这样的特性,LoadBalancer IP地址字段不会填充,仍然处于待定状态,服务将以与NodePort类型的服务相同的方式工作