我在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?
答案 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。