如何解决跨名称空间通信如何在Minkube中工作
我在启用了入口插件的Ubuntu 18.04的minikube中使用Kubernetes。 我希望通过仅通过Ingress控制器发出请求,将NextJS服务与通过Ingress服务器连接的Express Service通信。因此,当我使用跨名称空间通信时,它将无法正常使用,如本教程所示。由于minikube中的ingress-nginx在kube系统名称空间上运行。
$ kubectl get service -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller-admission ClusterIP 10.103.20.47 none 443/TCP 15d
kube-dns ClusterIP 10.96.0.10 none 53/UDP,53/TCP,9153/TCP 36d
我正在运行的服务
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
exp-mongo-srv ClusterIP 10.103.255.125 <none> 27017/TCP 42s
exp-srv ClusterIP 10.103.118.45 <none> 3000/TCP 42s
next-srv ClusterIP 10.108.158.184 <none> 3000/TCP 39s
预期的请求网址为:http://ingress-nginx.ingress-nginx.svc.cluster.local(通过nginx进行通信)
但是相反,我必须经过http://exp-srv:3000
(这是服务之间的直接通信)
解决方法
这很简单
您添加了错误的名称空间名称
代替
http://ingress-nginx.ingress-nginx.svc.cluster.local
应该是
http://ingress-nginx.kube-system.svc.cluster.local
如果您想将其用作主机并要解决它
如果您使用大使身份访问位于其他名称空间中的任何其他API网关,则始终建议使用:
Use : <service name>
Use : <service.name>.<namespace name>
Not : <service.name>.<namespace name>.svc.cluster.local
它将类似于:servicename.namespacename.svc.cluster.local
这会将请求发送到您提到的名称空间内的特定服务。
示例:
kind: Service
apiVersion: v1
metadata:
name: service
spec:
type: ExternalName
externalName: <servicename>.<namespace>.svc.cluster.local
在此处用适当的值替换<servicename>
和<namespace>
。
在Kubernetes中,名称空间用于创建虚拟环境,但它们彼此连接。
,刚刚偶然发现了这个。我认为默认情况下,作为 ClusterIP 的服务 ingress-nginx-controller-admission
只有 443,它是 HTTPS 端口,因此无法解析它。要解决这个问题,您需要做的是公开一个新的 clusterIP 服务。
kubectl 公开部署 ingress-nginx-controller --target-port=80 --type=ClusterIP -n kube-system
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。