向其他计算实例公开 GKE 上的 k8s 服务,但不向外部世界公开



我在Google Kubernetes Engine上创建了一个部署和服务。这些在云计算实例上运行。

我需要使我的 k8s 应用程序可从其他计算实例访问,但不能从外部世界访问。这是因为有一些遗留实例在集群外部运行,这些实例无法迁移(至少目前还无法迁移(。

我的理解是,Service使 Pod 可以从其他群集节点访问,而Ingress会将 Pod 暴露给具有外部 IP 的外部流量。

我需要的是

中间的东西:我需要在集群外部公开我的 Pod,但只能向其他本地计算实例(在同一区域中(公开。我不明白我应该怎么做。

在 Google Kubernetes Engine 中,这是通过一个LoadBalancer类型的服务来实现的,该服务被注释为内部负载均衡器。它的文档在 https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing。

假设您有一个带有标签app: echo-pod的部署,该部署侦听端口 080,并且您希望将其作为端口 80 公开给 GCE 实例,该服务将如下所示:

apiVersion: v1
kind: Service
metadata:
  name: echo-internal
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app: echo-pod
spec:
  type: LoadBalancer
  selector:
    app: echo-pod
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

创建服务和内部负载均衡器需要一些时间。创建后,它将具有外部 IP:

$ kubectl get services
NAME              TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
echo-internal     LoadBalancer   10.4.11.165   10.128.0.35   80:31706/TCP   2m33s
kubernetes        ClusterIP      10.4.0.1      <none>        443/TCP        20m

10.128.0.35 IP 实际上是只能在您的 VPC 内部访问的内部 IP 地址。从另一个 GCE 实例中,您可以在公开的端口上访问它:

$ curl http://10.128.0.35

Hostname: echo-deployment-5f55bb9855-hxl7b

注意:您需要在预置集群时启用"负载平衡"加载项。但它默认处于启用状态,除非您在创建群集时明确禁用了"启用 HTTP 负载平衡"选项,否则它应该可以正常工作。

最新更新