我正在学习Kubernetes,在本地Minikube(Docker驱动程序)中获取API时遇到麻烦。 我有一个运行angluar-client的pod,它试图到达后端pod。前端Pod由NodePort服务公开。后端pod通过ClusterIP服务暴露给群集。
但是,当我尝试从前端访问clusterip服务时,dns transpile-svc.default.svc.cluster.local
无法解决。
error message in the client
dns应该正常工作。我遵循了这个https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/,并在可以nslookup
的地方部署了dnsutils pod。
winpty kubectl exec -i -t dnsutils -- nslookup transpile-svc.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: transpile-svc.default.svc.cluster.local
Address: 10.99.196.82
这是clusterIP服务的.yaml文件
apiVersion: v1
kind: Service
metadata:
name: transpile-svc
labels:
app: transpile
spec:
selector:
app: transpile
ports:
- port: 80
targetPort: 80
即使我将IP硬编码到前端的请求中,我也得到了空响应。 我验证了后端Pod可以正常工作,并且当我将其作为NodePort公开时,可以使用浏览器访问api。
我在这里想念什么?我在相当长的一段时间内一直困扰于此问题,但找不到任何解决方案。
答案 0 :(得分:2)
由于前端应用程序正在从集群外部调用应用程序,因此您也需要将后端应用程序公开给外部网络。
有两种方法:要么通过将transpile-svc服务更改为loadbalancer类型直接将其公开,要么引入将处理所有重定向的入口控制器(例如,带有Ingres对象的Nginx入口控制器)
在minikube中将服务公开为负载均衡器的步骤
1。将您的服务transpile-svc类型更改为LoadBalancer 2.运行命令minikube service transpile-svc公开服务,即将分配IP。 3.运行kubectl get services以获取分配的外部IP。使用IP:POST从前端应用程序呼叫
答案 1 :(得分:0)
DNS主机名*.*.svc.cluster.local
仅可从kubernetes群集中解析。您应该在kubernetes集群之外的浏览器中运行的前端javascript代码中使用http://NODEIP:NODEPORT
或minikube service transpile-svc --url
提供的网址。
如果前端容器是nginx,则可以按照docs
中的说明,在nginx配置文件中如下配置后端服务名称。upstream transpile {
server transpile;
}
server {
listen 80;
location / {
proxy_pass http://transpile-svc;
}
}