GKE中如何访问NodePort服务
How can I visit NodePort service in GKE
这是我的服务 yaml。在 GKE.I 上创建 svc 时不知道如何访问 svc.I 找不到用于访问 svc 的外部 ip。如何以标准流程访问此 svc。是否需要创建入口?
apiVersion: v1
kind: Service
metadata:
namespace: dev
name: ui-svc
labels:
targetEnv: dev
app: ui-svc
spec:
selector:
app: ui
targetEnv: dev
ports:
- name: ui
port: 8080
targetPort: 8080
nodePort: 30080
type: NodePort
如果您不使用节点没有 public IP 地址的 private cluster,您可以使用任何节点的 public IP 访问您的 NodePort
服务地址。
您可以在 Endpoints
列的 Services & Ingresses
部分看到的内容,它是您的 NodePort
服务的内部集群 IP 地址。
如果您想知道 GKE 节点 的 public IP 地址是什么,请转到 Compute Engine > 虚拟机实例:
您将看到所有 Compute Engine VM 的列表,其中还包括您的 GKE 节点。请注意 External IP
列中的 IP 地址。您应该将它与您可以在 NodePort
服务详细信息中查看的端口号一起使用。只需单击它的名称 "ui-svc"
即可查看详细信息。在页面的最底部,您应该看到 ports
部分,它可能如下所示:
所以在我的情况下我应该使用 <any_node's_public_ip_address>:31251
.
还有一件重要的事情。不要忘记在 Firewall 上允许到此端口的流量,因为默认情况下它是被阻止的。所以你需要明确允许流量到你的节点,例如在 31251
端口上,以便能够从 public 互联网访问它。只需转到 VPC Network > Firewall 并设置适当的规则:
更新:
如果您创建了一个 Autopilot Cluster,默认情况下它是一个 public,这意味着它的节点有 public 个 IP 地址:
如果您在集群创建期间选择了第二个选项,即 "Private cluster"
,您的节点将不会有 public IP,您将无法访问您的 NodePort
任何 public IP 上的服务。因此,在这种情况下剩下的唯一选择是通过 LoadBalancer
服务或 Ingress
公开您的工作负载,其中为您创建了一个 public IP 端点,因此您可以从外部访问您的工作负载。
然而,如果您选择了默认选项,即 "Public cluster"
,您可以使用您节点的 public IP 来访问您的 NodePort
服务,就像您使用标准(非自动驾驶)集群。
当然,在自动驾驶模式下,您不会在 GCP 控制台中将节点视为计算引擎 VM,但您仍然可以通过 运行:
获取它们的 public IP
kubectl get nodes -o wide
它们将显示在 EXTERNAL-IP
列中。
要连接到您的集群,只需单击您可以在集群名称右侧看到的 3 个点 ("Kubernetes Engine"
> "Clusters"
) > 单击 "Connect"
> 单击 "RUN IN CLOUD SHELL"
.
由于您不知道为您的 GKE 自动导航节点(如果有的话)分配了哪些网络标签,因为您不管理它们并且它们不会显示在您的 GCP 控制台中,因此您不会在定义防火墙规则以允许访问您的 NodePort
服务端口时能够使用指定的网络标记,例如30543
并且您必须选择 "All instances in the network"
选项:
这是我的服务 yaml。在 GKE.I 上创建 svc 时不知道如何访问 svc.I 找不到用于访问 svc 的外部 ip。如何以标准流程访问此 svc。是否需要创建入口?
apiVersion: v1
kind: Service
metadata:
namespace: dev
name: ui-svc
labels:
targetEnv: dev
app: ui-svc
spec:
selector:
app: ui
targetEnv: dev
ports:
- name: ui
port: 8080
targetPort: 8080
nodePort: 30080
type: NodePort
如果您不使用节点没有 public IP 地址的 private cluster,您可以使用任何节点的 public IP 访问您的 NodePort
服务地址。
您可以在 Endpoints
列的 Services & Ingresses
部分看到的内容,它是您的 NodePort
服务的内部集群 IP 地址。
如果您想知道 GKE 节点 的 public IP 地址是什么,请转到 Compute Engine > 虚拟机实例:
您将看到所有 Compute Engine VM 的列表,其中还包括您的 GKE 节点。请注意 External IP
列中的 IP 地址。您应该将它与您可以在 NodePort
服务详细信息中查看的端口号一起使用。只需单击它的名称 "ui-svc"
即可查看详细信息。在页面的最底部,您应该看到 ports
部分,它可能如下所示:
所以在我的情况下我应该使用 <any_node's_public_ip_address>:31251
.
还有一件重要的事情。不要忘记在 Firewall 上允许到此端口的流量,因为默认情况下它是被阻止的。所以你需要明确允许流量到你的节点,例如在 31251
端口上,以便能够从 public 互联网访问它。只需转到 VPC Network > Firewall 并设置适当的规则:
更新:
如果您创建了一个 Autopilot Cluster,默认情况下它是一个 public,这意味着它的节点有 public 个 IP 地址:
如果您在集群创建期间选择了第二个选项,即 "Private cluster"
,您的节点将不会有 public IP,您将无法访问您的 NodePort
任何 public IP 上的服务。因此,在这种情况下剩下的唯一选择是通过 LoadBalancer
服务或 Ingress
公开您的工作负载,其中为您创建了一个 public IP 端点,因此您可以从外部访问您的工作负载。
然而,如果您选择了默认选项,即 "Public cluster"
,您可以使用您节点的 public IP 来访问您的 NodePort
服务,就像您使用标准(非自动驾驶)集群。
当然,在自动驾驶模式下,您不会在 GCP 控制台中将节点视为计算引擎 VM,但您仍然可以通过 运行:
获取它们的 public IPkubectl get nodes -o wide
它们将显示在 EXTERNAL-IP
列中。
要连接到您的集群,只需单击您可以在集群名称右侧看到的 3 个点 ("Kubernetes Engine"
> "Clusters"
) > 单击 "Connect"
> 单击 "RUN IN CLOUD SHELL"
.
由于您不知道为您的 GKE 自动导航节点(如果有的话)分配了哪些网络标签,因为您不管理它们并且它们不会显示在您的 GCP 控制台中,因此您不会在定义防火墙规则以允许访问您的 NodePort
服务端口时能够使用指定的网络标记,例如30543
并且您必须选择 "All instances in the network"
选项: