【问题标题】:Connect pods via service name in GCP K8's通过 GCP K8 中的服务名称连接 pod
【发布时间】:2020-02-03 16:55:24
【问题描述】:

我有许多针对托管在 Google Cloud K8 上的集群中的 Pod 运行的服务。

服务 1 是一个入口 - basic-ingress

Service 2 是一个带有 2 个 Pod 的 NodeJS API 网关 - security-gateway-svc

Service 3 是一个带有 2 个 Pod 的 NodeJS API - some-random-api-svc

等等服务 4 / 5 / 6 等等......

我的 Ingress 允许我通过子域访问公开的服务,但是我想将我的外部 API 移动到我的网关后面,以便我可以在网关中处理身份验证等。

我想做的是允许security-gateway-svc 连接到some-random-api-svc,而无需通过 dns 或我的集群之外。

我想我可以更新我的入口,以便所有子域使用相同的服务条目,并允许网关确定流量应该去哪里。

我可以在本地很好地配置它,因为一切都在 localhost 上运行,我指定了 port,所以它相当简单。

是否可以通过服务名称而不是实际的域/dns 查找将 pod 暴露给集群中的其他 pod?

【问题讨论】:

    标签: kubernetes google-cloud-platform kubernetes-ingress kubernetes-pod


    【解决方案1】:

    您的服务应该可以通过服务名称在您的集群中访问。

    将每个 api 的网关条目指向服务名称。

    http://some-random-api-svc 之类的东西应该可以工作。

    【讨论】:

      【解决方案2】:

      让 pod 在 Kubernetes 集群中可访问的更简单方法是使用服务 link to services documentation。为此,您需要创建一个 yaml 块,该块将创建一个由端点绑定到您的 pod 的内部主机名。此外,选择器将允许您将一个或多个 pod 绑定到该内部主机名。这是一个例子:

      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: $YOUR_SERVICE_NAME
        namespace: $YOUR_NAMESPACE
        labels:
          app: $YOUR_SERVICE_NAME
      spec:
        ports:
        - name: "8000"
          port: 8000
          targetPort: 8000
        selector:
          app: $YOUR_SERVICE_NAME
      
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: $YOUR_SERVICE_NAME
        namespace: $YOUR_NAMESPACE
        labels:
          app: $YOUR_SERVICE_NAME
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: $YOUR_SERVICE_NAME
        template:
          metadata:
            labels:
              app: k2m
          spec:
            containers:
              - name: $YOUR_SERVICE_NAME
                image: alpine:latest
            restartPolicy: Always
      

      最后,使用入口控制器路由中的服务名称将流量重定向到您的 api-gateway。

      【讨论】:

        【解决方案3】:

        Kubernetes 使用 CoreDNS 执行集群内 DNS 解析。默认情况下,所有Services 都以<service-name>.<namespace>.svc.cluster.local 的(FQDN)形式分配DNS 名称。因此,您的security-gateway-svc 将能够通过some-random-api-svc.<namespace> 将请求转发到some-random-api-svc,而无需将流量路由到Kubernetes 之外。请记住,您不应该直接与 pod 交互,因为 pod 是短暂的;总是通过Services。

        【讨论】:

          猜你喜欢
          • 2019-06-23
          • 2020-02-04
          • 1970-01-01
          • 2020-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-05
          • 2021-10-11
          • 1970-01-01
          相关资源
          最近更新 更多