Kubernetes入口相同路径多个端口

Jac*_*man 9 kubernetes-ingress

经过大量的谷歌搜索和搜索(即使在这里),我无法找到我的问题的明确答案。所以我希望这里的某个人能够为我指明正确的方向。

我有一个已经对我有用的 Kube 服务定义,但现在我只是用一个LoadBalancer. 这是我当前的服务 yaml:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: namespace1
  labels:
    app: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-service
    tier: web
  ports:
  - name: proxy-port
    port: 8080
    targetPort: 8080
  - name: metrics-port
    port: 8082
    targetPort: 8082
  - name: admin-port
    port: 8092
    targetPort: 8092
  - name: grpc-port
    port: 50051
    targetPort: 50051
Run Code Online (Sandbox Code Playgroud)

这显然只是 TCP 负载平衡。我想要做的是使用 Mutual TLS 来保护它,这样服务器将只接受来自我的客户端的具有授权证书的连接。

从我在 Kube 土地上所能知道的一切来看,我需要做的是一个Ingress定义。我一直在研究我可以找到的所有文档kind:Ingress,但似乎找不到任何可以让我在同一路径上创建Ingress具有多个端口的单个文档的地方

我在这里错过了什么吗?有没有办法创建一个Ingress与上述服务定义具有相同功能的 K8s ?

Nep*_*cen 6

据我所知,您不能将自定义端口(例如 8080)用于由 Ingress Controller(例如 NGINX HTTP(S) 代理)支持的 HTTPS LoadBalancer,因为目前 Ingress 的端口是隐式的 :80 用于 http 和 :443 用于 https,作为官方IngressRule 的文档参考解释了。

我认为解决方法是为每个服务使用不同的主机,就像这个 Ingress 资源示例一样:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: proxy.foo.com
    http:
      paths:
      - backend:
          serviceName: proxy-svc
          servicePort: 8080
  - host: metrics.foo.com
    http:
      paths:
      - backend:
          serviceName: metrics-svc
          servicePort: 8082
  - host: admin.foo.com
    http:
      paths:
      - backend:
          serviceName: admin-svc
          servicePort: 8092
  - host: grpc.foo.com
    http:
      paths:
      - backend:
          serviceName: grpc-svc
          servicePort: 50051
Run Code Online (Sandbox Code Playgroud)