1

首先,让我展示一个名为“kong”的命名空间中的 kubernetes 实体:

[projadmin@VOFDGSTP1 ~]$ kubectl get all -n kong
NAME                               READY   STATUS    RESTARTS   AGE
pod/ingress-kong-5d997d864-wsmsw   2/2     Running   2          13d

NAME                              TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/kong-proxy                LoadBalancer   10.100.200.3     <pending>     80:31180/TCP,443:31315/TCP   13d
service/kong-validation-webhook   ClusterIP      10.100.200.175   <none>        443/TCP                      13d

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-kong   1/1     1            1           13d

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/ingress-kong-5d997d864   1         1         1       13d

当我尝试从上面 ping IP 时,我收到超时错误。

[projadmin@VOFDGSTP1 ~]$ curl -i 10.100.200.175
curl: (7) Failed connect to 10.100.200.175:80; Connection timed out
[projadmin@VOFDGSTP1 ~]$ curl -i 10.100.200.176
curl: (7) Failed connect to 10.100.200.176:80; Connection timed out
[projadmin@VOFDGSTP1 ~]$ curl -i 10.100.200.3
curl: (7) Failed connect to 10.100.200.3:80; Connection timed out
4

2 回答 2

2

根据您共享的信息,我可以假设您正在尝试在集群外部运行该命令。

如果您这样做,它将无法正常工作,因为您无法访问ClusterIP集群外部的服务。

ClusterIP:在集群内部 IP 上公开服务。选择此值使服务只能从集群内访问。这是默认设置ServiceType

要检查您连接的服务器是否是集群的一部分,请键入kubectl get nodes -owidee 尝试在列表中查找 ip。

我看到您的服务service/kong-proxy带有EXTERNAL-IP: <pending>,这可能是因为您正在尝试使用 Kubernetes 的裸机安装,在这种情况下,您需要使用MetalLB来使您的LoadBalancer配置正常工作。

测试您的服务的另一种方法是使用kubectl port-foward,这会将您的服务映射到 localhost,您可以通过http://localhost:8080访问。例子:

kubectl port-forward svc/kong-proxy -n kong 8080:80

此命令会将您的服务映射到本地主机的端口 8080。

参考:

服务类型

金属LB

端口转发

于 2020-02-11T09:57:55.767 回答
0

集群 IP 无法从集群外部和部署了 kubernetes 的主机访问。您需要使用 Load Balancer 或 Nodeport 类型的服务从集群外部或从主机访问它。

查看 LoadBalancer 类型服务的外部 IP 的待处理状态,您似乎没有在公共云提供商上部署 kubernetes。LoadBalancer 类型的服务仅适用于支持的云提供商(例如 AWS、GCP)。

如果您在本地,那么您可以使用 Nodeport Type 服务。

来自 Kong文档关于何时在部署 Kong 时使用 Nodeport。

如果您的 Kubernetes 集群运行在云环境中,可以相对轻松地配置负载均衡器,建议您使用 LoadBalancer 类型的服务将 Kong 暴露给外部世界。为了使 Ingress Controller 正常运行,还需要使用 L4(或 TCP)负载均衡器,而不是 L7(HTTP(s))负载均衡器。

如果您的 Kubernetes 集群不支持 LoadBalancer 类型的服务,则可以使用 NodePort 类型的服务。

于 2020-02-07T13:21:13.603 回答