如何解决如何从集群内部访问 k8s Ingress
我有有状态的 serviceA,我需要使用粘性会话进行访问。为了实现粘性会话,我使用带有注释的 Nginx 入口
apiVersion: networking.k8s.io/v1
kind: Ingress
Metadata:
name: nginx-ingress
annotations:
Nginx.ingress.kubernetes.io/affinity: "cookie"
Nginx.ingress.kubernetes.io/affinity-mode: "persistent"
Nginx.ingress.kubernetes.io/session-cookie-name: "route"
当我从集群外部调用 serviceA 时,一切正常。
现在的问题是我需要在 k8s 内部的 serviceB 来访问 serviceA 并且仍然受益于粘性会话,所以流量需要 serviceB -> Ingress -> serviceA
我可以实现这一点,只需使用 Ingress 的公共主机名,但我想避免让流量离开集群然后再次返回。因此,使用公共主机的流量将是 serviceB -> NAT -> Public LoadBalancer Ingress -> Logical Ingress -> serviceA
所以我想知道 serviceB 是否有可能直接访问 Ingress,这样流量就会变成 serviceB -> Logical Ingress -> serviceA
解决方法
可能的解决方案是在集群中设置新服务并将其配置为选择入口控制器 Pod。
假设我们将此服务称为 let fetchRequest = NSFetchRequest<MyEntity>(entityName: "MyEntity")
let predicate = NSPredicate(format: "someRelation.@count = 0")
fetchRequest.predicate = predicate
let result:[MyEntity] = try context.fetch(fetchRequest2)
,您可以使用命令轻松创建它:
ingress-internal-service
如您所见,我的服务现在有一个与我的 ➜ ~ k expose deployment -n kube-system ingress-nginx-controller --name ingress-internal-service --port 80
service/ingress-internal-service exposed
匹配的端点:
ingress-controller-pod
这是我用 curl 做的测试(#POD
kube-system ingress-nginx-controller-558664778f-dn2cl 1/1 Running 24h 172.17.0.7
#SERVICE
Name: ingress-internal-service
-----
Type: ClusterIP
IP: 10.111.197.14
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 172.17.0.7:80
是我的入口主机)
myapp.com
这与暴露 nginx 控制器的 node-port-bare-metal 方式非常相似,不同之处在于我们只是使用 ClusterIp。
附注。如果您使用的是云环境,您可能需要检查/考虑使用 Using an internal TCP/UDP load balancer。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。