通过GCP K8的

时间:2019-10-05 19:59:04

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

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

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

服务2 是带有两个Pod的NodeJS API网关-security-gateway-svc

服务3 是带有2个窗格的NodeJS API-some-random-api-svc

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

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

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

我认为我可以更新自己的入口,以便所有子域都使用相同的服务条目,并允许网关确定流量应该流向何处。

我可以在本地进行配置,因为所有内容都在localhost上运行,并且我指定了port,因此相当简单。

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

3 个答案:

答案 0 :(得分:1)

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

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

类似47600816c0dca3e5555e417085ab2052453a39b2的东西应该起作用。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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