kubernetes服务外部IP挂起

问题描述 投票:54回答:7

我正在尝试在kubernetes上部署nginx,kubernetes版本是v1.5.2,我已经部署了3个副本的nginx,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仪表板上显示为待定。 Terminal outputDash board status

所以请帮我解决这个问题。谢谢 ...

docker kubernetes virtualization
7个回答
109
投票

看起来您正在使用自定义Kubernetes Cluster(使用minikubekubeadm等)。在这种情况下,没有集成LoadBalancer(与AWS或Google Cloud不同)。使用此默认设置,您只能使用NodePort或Ingress Controller。使用Ingress Controller,您可以设置一个映射到您的pod的域名。


0
投票

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


0
投票

关注@Javier的回答。我决定为我的负载均衡器“修补外部IP”。

http://192.168.99.100:30454

有关这方面的更多信息请参阅karthik在 $ kubectl patch service my-loadbalancer-service-name \ -n lb-service-namespace \ -p '{"spec": {"type": "LoadBalancer", "externalIPs":["192.168.39.25"]}}' 上的帖子

不是最干净的方法。我需要一个临时解决方案。希望这有助于某人。


25
投票

要访问minikube上的服务,您需要运行以下命令:

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

更多信息:Minikube GitHub


25
投票

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

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

23
投票

如果您使用的是Minikube,那就有一个神奇的命令!

$ minikube tunnel

希望有人可以节省几分钟。

参考链接https://github.com/kubernetes/minikube/blob/master/docs/networking.md#loadbalancer-emulation-minikube-tunnel


8
投票

我使用kubeadm创建了一个单节点k8s集群。当我尝试使用PortForward和kubectl代理时,它将外部IP显示为待处理。

$ kubectl get svc -n argocd argocd-server
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-server   LoadBalancer   10.107.37.153   <pending>     80:30047/TCP,443:31307/TCP   110s

就我而言,我修补了这样的服务:

kubectl patch svc <svc-name> -n <namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["172.31.71.218"]}}'

在此之后,它开始服务于公共IP

$ kubectl get svc argo-ui -n argo
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
argo-ui   LoadBalancer   10.103.219.8   172.31.71.218   80:30981/TCP   7m50s

1
投票

使用NodePort:

kubectl运行user-login --replicas = 2 --labels =“run = user-login” - image = kingslayer / team project:version 2 --port = 5000

kubectl公开部署user-login --type = NodePort --name = user-login-service

kubectl描述服务user-login-service(注意端口)

kubectl cluster-info(IP->获取运行master的IP)

您可以通过(IP)访问您的服务:(端口)


1
投票

同样的问题:

os> kubectl获取svc right-sabertooth-wordpress

名称类型集群-IP外部-IP端口(S) right-sabertooth-wordpress LoadBalancer 10.97.130.7“pending”80:30454 / TCP,443:30427 / TCP

我们> minicube服务列表

|-------------|----------------------------|--------------------------------|

| NAMESPACE | NAME |网址|

|-------------|----------------------------|--------------------------------|

|默认| kubernetes |从节点端口|

|默认| right-sabertooth-mariadb |没有节点端口|

|默认| right-sabertooth-wordpress | http://192.168.99.100:30454 |

| | | http://192.168.99.100:30427 |

|立方体系统|立方体dns |但请注意端口|

| kube系统|分蘖部署|没有节点端口|

|-------------|----------------------------|--------------------------------|

但是,它可以通过qazxsw poi访问。


1
投票

如果在minikube上运行,如果您没有使用默认值,请不要忘记提及命名空间。

minikube service << service_name >> --url --namespace = << namespace_name >>


0
投票

删除现有服务并创建相同的新服务解决了我的问题。我的问题是使用Ip I定义的加载平衡,以便外部端点处于挂起状态。当我更改新的负载均衡IP时,它仍然无法正常工作。最后,删除现有服务并创建一个新服务解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.