如何解决Kubernetes:无法在微服务应用程序中互连Pod
我正在开发微服务应用程序,但无法将React连接到后端api pod。
该请求将是内部的,因为我正在使用ServerSideRendering ,因此,当页面首次加载时,客户端窗格直接连接到后端窗格。 我也在使用ingress-nginx在内部进行连接。
端点(来自React pod-> Express pod):
http://ingress-nginx-controller.ingress-nginx.svc.cluster.local
入口详细信息:
$ kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.81.11 149.69.37.110 80:31702/TCP,443:31028/TCP 2d1h
入口配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: cultor.dev
http:
paths:
- path: /api/users/?(.*)
backend:
serviceName: auth-srv
servicePort: 3000
- path: /?(.*)
backend:
serviceName: client-srv
servicePort: 3000
入口日志:
[error] 1230#1230: *1253654 broken header: "GET /api/users/currentuser HTTP/1.1
此外,我无法从客户端窗格内的 ping ingress-nginx-controller.ingress-nginx.svc.cluster.local 。
其他日志
$ kubectl get ns
NAME STATUS AGE
default Active 2d3h
ingress-nginx Active 2d1h
kube-node-lease Active 2d3h
kube-public Active 2d3h
kube-system Active 2d3h
#####
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
auth-mongo-srv ClusterIP 10.245.155.193 <none> 27017/TCP 6h8m
auth-srv ClusterIP 10.245.1.179 <none> 3000/TCP 6h8m
client-srv ClusterIP 10.245.100.11 <none> 3000/TCP 6h8m
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 2d3h
更新: 入口日志:
[error] 1230#1230: *1253654 broken header: "GET /api/users/currentuser HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
host: cultor.dev
x-request-id: 5cfd15996dc8481114b39a16f0be5f06
x-real-ip: 45.248.29.8
x-forwarded-for: 45.248.29.8
x-forwarded-proto: https
x-forwarded-host: cultor.dev
x-forwarded-port: 443
x-scheme: https
cache-control: max-age=0
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/85.0.4183.83 Safari/537.36
sec-fetch-site: none
sec-fetch-mode: navigate
sec-fetch-user: ?1
sec-fetch-dest: document
accept-encoding: gzip,deflate,br
accept-language: en-US,en-IN;q=0.9,en;q=0.8,la;q=0.7
解决方法
这是将Ingress负载平衡器与Digitalocean结合使用以通过负载平衡器在内部连接Pod 的错误:
必须设置一个自定义主机名的DNS记录(由您选择的提供程序),该记录指向负载均衡器的外部IP地址。之后,必须指示digitalocean-cloud-controller-manager在服务入口状态字段status.hostname中返回自定义主机名(而不是外部LB IP地址)。通过在service.beta.kubernetes.io/do中指定主机名-loadbalancer-主机名注释。然后,客户端可以连接到主机名,以从群集内部访问负载均衡器。解决方法:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。