通过 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 是短暂的;总是经历 Service
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 是短暂的;总是经历 Service
s.