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


当前回答

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

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

其他回答

如果您尝试在on-prem云中执行此操作,则需要一个L4LB服务来创建LB实例。

否则,您将收到您所描述的无穷无尽的“待处理”消息。可以在这里看到一个视频:https://www.youtube.com/watch?v=p6FYtNpsT1M

您可以使用开源工具来解决这个问题,视频提供了一些关于自动化过程应该如何工作的指导。

使用实例访问minikube上的服务。

minikube service [-n NAMESPACE] [--url] NAME

更多信息:Minikube GitHub

如果使用裸金属,则需要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

我也有同样的问题。 Windows 10 Desktop + Docker Desktop 4.7.1 (77678) + Minikube v1.25.2

根据我这边的官方文件,我决定:

PS C:\WINDOWS\system32> kubectl expose deployment sito-php --type=LoadBalancer --port=8080 --name=servizio-php
service/servizio-php exposed
PS C:\WINDOWS\system32> minikube tunnel
 * Tunnel successfully started

 * NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...

 * Starting tunnel for service servizio-php.


PS E:\docker\apache-php> kubectl get service
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes     ClusterIP      10.96.0.1      <none>        443/TCP          33h
servizio-php   LoadBalancer   10.98.218.86   127.0.0.1     8080:30270/TCP   4m39s

http://127.0.0.1:8080/上的开放浏览器

同样的问题:

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访问。