我正在学习库伯内特斯,我在本地Minikube(Docker驱动程序)中遇到了API的麻烦。我有一个运行angluar客户端的pod,它试图访问后端pod。前端pod由NodePort服务公开。后端pod由ClusterIP服务公开给集群。
但是当我尝试从前端访问grousterip服务时,dnsTranspile-svc. default.svc.club.local
无法得到解决。客户端中的错误消息
我遵循这个https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/并部署了一个dnsutils pod,从那里我可以nslookup
。
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
这是群集IP服务的. 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。
我在这里错过了什么?我已经被这个问题困扰了很长一段时间,我没有找到任何解决方案。
由于您的前端应用程序是从集群外部调用您的应用程序,因此您也需要将您的后端应用程序公开给外部网络。
有两种方法:要么通过将转译svc服务更改为负载均衡器类型直接公开它,要么引入一个入口控制器(例如带有Ingres对象的Nginx入口控制器)来处理所有重定向
在minikube中公开服务作为负载均衡器的步骤
1.将您的服务传输svc类型更改为LoadBalancer2.Run命令minikube service传输svc以公开服务,即将分配IP。3.运行kubectl get services以分配外部IP。使用IP: POST从前端应用程序调用
DNS主机名*.*. svc.club.local
只能在kubernetes集群中解析。您应该在运行在kubernetes集群之外的浏览器中的前端javascript代码中使用超文本传输协议://NODEIP:NODEPORT
或由minikube service transile-svc--url
提供的url。
如果前端pod是nginx,那么您可以在nginx配置文件中配置后端服务名称,如下所述,如文档所述
upstream transpile {
server transpile;
}
server {
listen 80;
location / {
proxy_pass http://transpile-svc;
}
}