Kubernetes路径基于多个名称空间的路由



环境:我有一个Kubernetes群集设置了" dev"," sit"one_answers" prod"的命名空间。在这些命名空间中,我都有多种类型的服务:负载Balancer,它针对Dockerised应用程序的特定部署(我有多个应用程序(,因此我只需使用我想要的任何名称空间的服务的裸露IP地址来访问这些应用程序。示例服务看起来很简单:

apiVersion: v1
kind: Service
metadata:
  name: application1
spec:
  ports:
  - port: 80
    targetPort: 3000
    protocol: TCP
    name: http
  type: LoadBalancer
  selector:
    app: application1

问题:我现在希望能够支持所有应用程序的多个版本(ip:/v1/,ip:/v2/em>等(,以便允许当用户准备就绪时,用户将迁移到新版本,并且我一直在尝试按照本指南实现基于路径的路由。我设法重组了我的体系结构,以便我有复制controllers和一个入口,它着眼于通往正确服务的路径的规则。

如果我只有一个曝光服务和一个单个名称空间,这似乎有效如何指定没有主机名的服务的入口规则。

我可以为每个环境都有一个负载量,并使用基于路径的路由来路由DEV和SIT的每个不同服务,这是不理想的,因为要访问我们现在必须使用此类IP/Application1和IP/Application2而不是直接使用每个应用程序的服务IP地址。但是我最大的问题是,当我遵循指南并在我的SIT名称空间中创建Ingress,ReplicationController和服务时,它开始影响其他两个环境中的LoadBalancer服务(据我了解,Kubernetes有时会尝试使用Nginx控制器。在我的开发服务上的位置环境,因此将失败,其他时候它将使用GCE默认配置并将起作用(。

我尝试添加arg" - -watch-namespace = sit",以限制入口控制器的范围以仅影响SIT,但似乎不起作用。

我现在希望能够支持所有应用程序的多个版本(ip:/v1/,ip:/v2/等(

这正是Ingress可以做的,但是问题是您要使用IP地址进行路由,但是Ingress为此使用了DNS名称。

我认为实现此目的的最佳方法是使用可以处理请求的入口。在GCE入口上使用HTTP(S(负载平衡器。是的,您将需要一个DNS名称,但是它将帮助您创建所需的路由。
另外,我强烈建议将TLS加密进行连接。
您可以检查Letsencrypt以获取免费的SSL证书。

因此,解决方案应该喜欢以下:

1。使用类型" clusterip"而不是" LoadBalancer"部署服务。您可以为应用程序拥有多个服务对象,因此您可以与当前配置并行进行。
2.选择任何名称空间(甚至是特殊的名称空间(,例如 - " Ingress -ns"。我们需要创建那里的服务对象,该对象将指向您的其他名称空间的服务。这是服务的示例(让新DNS名称为" my.shiny.new.domain"(:

kind: Service
apiVersion: v1  
  metadata:
    name: service-v1
    namespace: ingress-ns
 spec:  
   type: ExternalName
   externalName: <service>.<namespace>.svc.cluster.local # here is a service name and namespace of your service with version v1.
  ports:
    - port: 80 

3。现在,我们有一个名称空间,其中有几个服务,这些服务指向您在不同名称空间的应用程序的不同版本。现在,我们可以创建一个Ingress对象,该对象将在GCE上创建HTTP(S(加载平衡器,并具有基于路径的路由:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: test
 namespace: ingress-ns
spec:
 rules:
 - host: my.shiny.new.domain
   http:
     paths:
     - path: /v1
       backend:
         serviceName: service-v1
         servicePort: 80
     - path: /v2
       backend:
         serviceName: service-v2
         servicePort: 80

kubernetes将使用您在入口对象中设置的规则创建一个新的HTTP(S(平衡器,并且您将具有基于Cross-Namespaces路径路由的入口点,并且您不必使用多个IP地址为了那个原因。

实际上,您也可以通过该应用程序的主要版本来管理,并使用"/"路径使用主域来处理生产版本的请求。

相关内容

  • 没有找到相关文章

最新更新