微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从集群内部访问 k8s Ingress

如何解决如何从集群内部访问 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 举报,一经查实,本站将立刻删除。