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


当前回答

minikube隧道

下面的解决方案适用于我的情况。

首先,试试这个命令:

minikube tunnel

如果这对你不起作用。遵循以下几点:

我重启minikube容器。

docker minikube stop 

then

docker minikube start

之后重新运行kubernetes

minikube dashboard

完成后执行:

 minikube tunnel

其他回答

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

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

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

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

同样的问题:

os>kubectl get svc right-sabertooth-wordpress NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) right-sabertooth-wordpress LoadBalancer 10.97.130.7 "pending" 80:30454/TCP,443:30427/TCP os>minikube service list |-------------|----------------------------|--------------------------------| | NAMESPACE | NAME | URL | |-------------|----------------------------|--------------------------------| | default | kubernetes | No node port | | default | right-sabertooth-mariadb | No node port | | default | right-sabertooth-wordpress | http://192.168.99.100:30454 | | | | http://192.168.99.100:30427 | | kube-system | kube-dns | No node port | | kube-system | tiller-deploy | No node port | |-------------|----------------------------|--------------------------------|

但是,可以通过http://192.168.99.100:30454访问。

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

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

当使用Minikube时,您可以通过它获取IP和端口 可以通过运行以下命令访问服务:

minikube service [service name]

例如:

minikube service kubia-http