我试图在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仪表板上也在终端上显示为待定。


当前回答

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

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

microk8s enable metallb

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

其他回答

删除所有旧的服务并创建新的服务解决了我的问题。IP被绑定到旧的服务。只需尝试“$kubectl获得svc”,然后逐个删除所有svc的“$kubectl删除svc' svc名称”

检查kube-controller日志。我能够通过将clusterID标记设置为我部署集群的ec2实例来解决这个问题。

如果您没有使用GCE或EKS(您使用的是kubeadm),您可以向您的服务YAML添加一个externalps规范。您可以使用与节点主接口相关联的IP,例如eth0。然后,您可以使用节点的外部IP从外部访问该服务。

...
spec:
  type: LoadBalancer
  externalIPs:
  - 192.168.0.10

如果你正在使用minikube,那么从终端运行下面的命令,

$ minikube ip
$ 172.17.0.2 // then 
$ curl http://172.17.0.2:31245
or simply
$ curl http://$(minikube ip):31245

那些正在使用minikube并试图访问NodePort或LoadBalancer类服务的用户。

我们不能通过外部IP访问本地的服务 系统。所以一个好的选择是使用minikube IP

一旦您的服务公开,使用下面的命令获取minikube IP。

minikube service service-name --url

现在使用这个URL来达到你的目的。