我有一个 Kubernetes 服务,它公开两个端口,如下所示
Name: m-svc
Namespace: m-ns
Labels:
Annotations: <none>
Selector: app=my-application
Type: ClusterIP
IP: 10.233.43.40
Port: first 8080/TCP
TargetPort: 8080/TCP
Endpoints: 10.233.115.178:8080,10.233.122.166:8080
Port: second 8888/TCP
TargetPort: 8888/TCP
Endpoints: 10.233.115.178:8888,10.233.122.166:8888
Session Affinity: None
Events: <none>
这是入口定义:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: f5
virtual-server.f5.com/http-port: "80"
virtual-server.f5.com/ip: controller-default
virtual-server.f5.com/round-robin: round-robin
creationTimestamp: 2018-10-05T18:54:45Z
generation: 2
name: m-ingress
namespace: m-ns
resourceVersion: "39557812"
selfLink: /apis/extensions/v1beta1/namespaces/m-ns
uid: 20241db9-c8d0-11e8-9fac-0050568d4d4a
spec:
rules:
- host: www.myhost.com
http:
paths:
- backend:
serviceName: m-svc
servicePort: 8080
path: /first/path
- backend:
serviceName: m-svc
servicePort: 8080
path: /second/path
status:
loadBalancer:
ingress:
- ip: 172.31.74.89
但是当我去的时候,www.myhost.com/first/path
我最终得到了正在监听端口8888
的服务m-svc
。可能会发生什么?
另一条信息是我在两个指向同一服务上不同端口的入口之间共享服务,这是一个问题吗?此服务上有一个不同的入口端口,即端口 8888,可以正常工作
我也在使用 F5 控制器
经过大量时间调查,看起来根本原因在 F5s 中,看起来因为后端(Kubernetes 服务)的名称相同,它只在池中创建一个条目并将请求路由到这个后端和在 F5 策略中注册的一个端口。有解决办法吗?一种解决方法是为每个端口创建一个独特的服务,但我不想进行此更改,这在 F5 级别是否可行?