我在Kubernetes中遇到内部DNS /服务解决方案的问题,而我似乎无法追踪问题。我有一个运行Kong的api-gateway pod,它通过内部服务名称调用其他服务,即ng serve --host 0.0.0.0 --port 4200
。直到最近才开始工作。我尝试将另外3个服务部署到两个名称空间,分段和生产。
第一个服务在调用srv-name.staging.svc.cluster.local
时按预期工作,但是相同的代码似乎在生产服务中不起作用。而另外两个服务在这两个名称空间中都不值得。
我得到的行为是暂停。如果我从我的网关pod中卷曲这些服务,除了部署的第一个服务(booking-service.staging.svc.cluster.local
)之外,它们都会超时。当我从同一个pod中的另一个容器调用这些服务时,它们执行按预期工作。
我为每个希望向客户端公开的服务设置了Node服务。
以下是Kubernetes部署的示例:
booking-service.staging.svc.cluster.local
我使用go-micro https://github.com/micro/go-micro和Kubernetes预配置。这在一个案例中再次起作用绝对正常,但并非所有其他案例。这让我相信它与代码无关。它也适用于本地。
当我从另一个pod执行---
# API
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{SRV_NAME}}
spec:
replicas: 1
template:
metadata:
labels:
app: {{SRV_NAME}}
spec:
containers:
- name: booking-api
image: microhq/micro:kubernetes
args:
- "api"
- "--handler=rpc"
env:
- name: PORT
value: "8080"
- name: ENV
value: {{ENV}}
- name: MICRO_REGISTRY
value: "kubernetes"
ports:
- containerPort: 8080
- name: {{SRV_NAME}}
image: eu.gcr.io/{{PROJECT_NAME}}/{{SRV_NAME}}:latest
imagePullPolicy: Always
command: [
"./service",
"--selector=static"
]
env:
- name: MICRO_REGISTRY
value: "kubernetes"
- name: ENV
value: {{ENV}}
- name: DB_HOST
value: {{DB_HOST}}
- name: VERSION
value: "{{VERSION}}"
- name: MICRO_SERVER_ADDRESS
value: ":50051"
ports:
- containerPort: 50051
name: srv-port
---
apiVersion: v1
kind: Service
metadata:
name: booking-service
spec:
ports:
- name: api-http
port: 80
targetPort: 8080
protocol: TCP
selector:
app: booking-api
时,它会解析名称并按预期查找内部Node服务的群集IP。当我尝试cURL该IP地址时,我得到相同的超时行为。
我在Google Cloud上使用Kubernetes 1.8。
答案 0 :(得分:0)
我不明白为什么你认为这是Kubernetes中内部DNS /服务解析的问题,因为当你执行DNS查找时它可以工作,但是如果你查询那个IP就会出现连接超时。
pod之间的连接似乎不仅仅是DNS问题,因此我会将您的故障排除集中在这个方向,但如果我错了,请纠正我。
您是否可以从容器中执行经典网络故障排除(ping,telnet,traceroute)到DNS查找给出的IP,以及从其中一个容器中执行超时到其他容器之一并使用结果