通过 GCP K8 中的服务名称连接 pods

Connect pods via service name in GCP K8's

我在 Google Cloud K8 上的集群中托管了一些针对 Pods 的服务 运行。

服务 1 是一个 Ingress - basic-ingress

服务 2 是一个 NodeJS API 网关 w/ 2 Pods - security-gateway-svc

服务 3 是一个 NodeJS API w/ 2 Pods - some-random-api-svc

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

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

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

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

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

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

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

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

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

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

---
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-网关。

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