统一kubernetes中的服务端点

时间:2019-09-15 18:30:35

标签: service kubernetes routing

是否可以“统一”在kubernetes中运行的单个服务的端点?例如,我有两项服务:

  1. 用户
  2. 发布

两个服务都使用其自己的端口公开。例如:http://localhost:30888/api/userhttp://localhost:30884/api/post

现在我想要一个这样的界面:

http://localhost:8080/api/userhttp://localhost:8080/api/post。我该如何配置?

使用以下方法公开服务:

apiVersion: v1
kind: Service
metadata:
  name: post-service
  labels:
    app: post-service
spec:
  type: NodePort
  ports:
    - port: 44884
      nodePort: 30884
  selector:
    app: post

2 个答案:

答案 0 :(得分:3)

这听起来像是您要在服务顶部添加Ingress。入口可以做很多事情,包括根据路径将流量发送到不同的服务。

让您入门的Ingress可能类似于:

css

在幕后,使Ingress工作的原因取决于您如何运行Kubernetes集群。例如,如果您使用的是GKE,则实际上将Ingress实现为HTTP load balancer。如果您使用的是EKS,则将其实现为Application load balancer。每个负载均衡器都有很多功能和选项,但是在开始任何操作之前,您应该了解的最大功能是,它们将在运行集群的基础上增加额外的费用。

编辑:

正如评论中提到的Prometherion,Ingress允许来自群集外部的流量。如果您正在运行某种类型的公开网站,则可能是您想要的。但是,如果这些是不应暴露给外部世界的内部端点,则可能需要调查service meshes from prometherion's answer

答案 1 :(得分:2)

实际上,使用Kubernetes默认资源是不可能的:您必须根据自己的喜好使用IstioMaeshLinkerd之类的可用服务网格,或者使用简单的代理(NGINX,HAproxy或使用http/net标准库的简单GoLang应用程序。)

我不是Istio的专家(实际上这是可用的最常用的Service Mesh之一),但是VirtualService可能可以解决问题,并提供 DestinationRule 资源。 / p>

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews-route
spec:
  hosts:
  - you-service.your-namespace.svc.cluster.local
  http:
  - name: user-v1-routes
    match:
    - uri:
        prefix: "/api/user"
    route:
    - destination:
        host: user-service.your-namespace.svc.cluster.local
        subset: v1
  - name: post-v1-route
    route:
    - destination:
        host: post-service.your-namespace.svc.cluster.local
        subset: v1
    match:
    - uri:
        prefix: "/api/post"
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: user-destination
spec:
  host: user-service.yout-namespace.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1
      app: user
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: post-destination
spec:
  host: post-service.yout-namespace.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1
      app: post

YMMV和YAML只是说明性的。