无法使用<nodeip>:<nodeport>访问服务

时间:2020-07-02 15:01:14

标签: google-kubernetes-engine

我在Services集群中有以下GKE

NAME                  TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE     SELECTOR
currency-conversion   NodePort       10.105.13.208   <none>          8100:30285/TCP   5h56m   app=currency-conversion
currency-exchange     LoadBalancer   10.105.6.251    34.72.191.147   8000:31396/TCP   5h59m   app=currency-exchange
kubernetes            ClusterIP      10.105.0.1      <none>          443/TCP          3d12h   <none>

我在Nodes中有以下GKE

NAME                                                STATUS   ROLES    AGE   VERSION         INTERNAL-IP   EXTERNAL-IP       OS-IMAGE                             KERNEL-VERSION   CONTAINER-RUNTIME
gke-my-first-cluster-1-default-pool-c2c915e7-818c   Ready    <none>   9h    v1.17.6-gke.7   10.128.0.9    35.194.22.175     Container-Optimized OS from Google   4.19.112+        docker://19.3.6
gke-my-first-cluster-1-default-pool-c2c915e7-xg0r   Ready    <none>   9h    v1.17.6-gke.7   10.128.0.8    104.197.190.232   Container-Optimized OS from Google   4.19.112+        docker://19.3.6
gke-my-first-cluster-1-default-pool-c2c915e7-z8fn   Ready    <none>   9h    v1.17.6-gke.7   10.128.0.10   35.188.75.231     Container-Optimized OS from Google   4.19.112+        docker://19.3.6

当我尝试使用以下命令时:

  • curl http://35.194.22.175:30285/

我得到了Timeout error

1 个答案:

答案 0 :(得分:1)

由于防火墙规则,您无法访问服务currency-conversion默认情况下,VPC Firewall将阻止您的请求。 要允许流量进入您的currency-conversion服务,您可以:

  • 创建一个允许流量进入的防火墙规则(您将可以$ curl NODE_IP:NODE_PORT)
    • $ gcloud compute firewall-rules create test-node-port --allow tcp:NODE_PORT
  • 创建类型为LoadBalancer的服务,该服务将分配公共IP地址并创建转发规则以进行访问(您已经使用currency-exchange完成了此服务):
    • $ kubectl expose deployment NAME --type=LoadBalancer --port=PORT-CONTAINER-IS-LISTENING-ON

您可以在此处阅读有关Kubernetes服务的更多信息:


免责声明!

$ gcloud compute firewall-rules create test-node-port --allow tcp:node-port

上述规则将允许流量流向默认网络中的 ALL 个实例。

对于更安全的方法,您可以使用以下规则:

$ gcloud compute --project=PROJECT_NAME firewall-rules create allow-nodeport --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:30285,udp:30285 --source-ranges=0.0.0.0/0 --target-tags=gke-gke-XYZ-ABC-node

重点关注上述命令的一部分:

  • --direction=INGRESS-用于传入请求
  • --network=default-使用您的GKE群集所在的网络的名称
  • --rules=tcp:30285,udp:30285-使用您的服务公开的端口号(30285)
  • --source-ranges=0.0.0.0/0-此参数将允许来自任何IP的流量
  • --target-tags=gke-gke-XYZ-ABC-node-使用network tag集群节点中的GKE。您可以进入network tag来获得此GCP -> Compute Engine -> GKE-NODE -> VM Instance details -> network tags

您也可以在这里看看: