入口指向服务上的错误端口

use*_*mda 8 kubernetes kubernetes-ingress kubernetes-service

我有一个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>
Run Code Online (Sandbox Code Playgroud)

以下是入口定义:

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
Run Code Online (Sandbox Code Playgroud)

但是当我去的时候,www.myhost.com/first/path我最终会收听正在收听端口8888的服务m-svc.可能会发生什么?

另一条信息是我在两个入口之间共享服务,指向同一服务上的不同端口,这是一个问题吗?该服务上的端口8888有一个不同的入口端口,工作正常

我也在使用F5控制器

经过大量的时间调查,看起来根本原因是在F5中,看起来因为后端的名称(Kubernetes服务)是相同的,它只在池中创建一个条目并将请求路由到此后端和在F5策略中注册的一个端口.有没有解决这个问题?解决方法是为每个端口创建一个唯一的服务,但我不想进行此更改,这是否可以在F5级别?

Ric*_*ico 4

据我所知,你没有Selector服务领域。如果没有它,它将不会转发到任何后端或 pod。是什么让你认为它会移植8888?奇怪的是你有为Endpoints你服务的。您手动创建它们吗?

该服务必须是这样的:

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>
Run Code Online (Sandbox Code Playgroud)

然后在您的部署定义中:

selector:
  matchLabels:
    app: my-application
Run Code Online (Sandbox Code Playgroud)

或者在 Pod 中:

apiVersion: v1
kind: Pod
metadata:
  annotations: { ... }
  labels:                                
    app: my-application
Run Code Online (Sandbox Code Playgroud)

您还应该能够描述您的Endpoints

$ kubectl describe endpoints m-svc
Name:         m-svc
Namespace:    default
Labels:       app=my-application
Annotations:  <none>
Subsets:
  Addresses:          x.x.x.x
  NotReadyAddresses:  <none>
  Ports:
    Name    Port  Protocol
    ----    ----  --------
    first   8080  TCP
    second  8081  TCP

Events:  <none>
Run Code Online (Sandbox Code Playgroud)