首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes中的牧场主元数据/ Confd等值

Kubernetes中的牧场主元数据/ Confd等值
EN

Stack Overflow用户
提问于 2018-10-12 22:38:23
回答 2查看 236关注 0票数 1

在当前的Rancher environment上,我们根据对Rancher元数据的调用动态配置Nginx配置,使用容器上的标签来确定容器是否包含在Nginx路由中。

我们使用带有confd后端的Rancher来完成元数据检查,并动态地更改/重新加载新的Nginx配置。

我们已经开始致力于迁移到Kubernetes (AWS )。是否有与此confd/Rancher等效的Kubernetes

由于一些技术原因和时间范围的原因,我们目前无法用等效的nginx替换这个ingress,因此正在研究如何使用服务/豆荚上的注释或标签来保持动态配置功能。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-14 06:20:43

托管的Kubernetes提供程序通常不会让您直接访问后台etcd,因此您最好的选择是为您感兴趣的资源挖掘Kubernetes API并生成您的配置。

这正是入口控制器所做的-监视Kubernetes资源的变化,并为像nginx这样的负载均衡器生成配置。

其中一个nginx控制器允许您使用用您自己的模板完全替换它使用的模板。

NGINX模板位于文件/etc/nginx/ template /nginx.tmpl中。 使用卷,就可以使用自定义模板。这包括使用Configmap作为模板的源。

代码语言:javascript
复制
        volumeMounts:
      - mountPath: /etc/nginx/template
        name: nginx-template-volume
        readOnly: true
  volumes:
    - name: nginx-template-volume
      configMap:
        name: nginx-template
        items:
        - key: nginx.tmpl
          path: nginx.tmpl

您可以部署类似于在自定义类下的nginx入口控制器nginx-legacy的版本,这样它就不会尝试公开期望正常nginx入口的服务。

为此,必须将选项-ingress class更改为复制控制器定义中群集的唯一值。

代码语言:javascript
复制
spec:
  template:
     spec:
       containers:
         - name: nginx-ingress-legacy-controller
           args:
             - /nginx-ingress-controller
             - '--election-id=ingress-controller-leader-internal'
             - '--ingress-class=nginx-legacy'
             - '--configmap=ingress/nginx-ingress-internal-controller'

然后对遗留服务进行注释,使用以下方法将资源分配给该入口:

代码语言:javascript
复制
metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx-legacy"
票数 0
EN

Stack Overflow用户

发布于 2018-12-20 23:07:58

为了进一步了解我们最终发现了什么,这要感谢Scott的回答。

使用nginx自定义模板技术,我们能够动态地配置nginx配置,方法是在Ingress资源中使用注释并在nginx自定义模板中引用它们。

具有定义为以下内容的信息共享资源元数据:

代码语言:javascript
复制
metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx-legacy"
    mycompany/bar: "path_to_service"

在自定义Nginx模板(location块)中,查看注释是否存在:

代码语言:javascript
复制
{{if index $ing.Annotations "mycompany/bar"}}

要从注释中获取值,请执行以下操作:

代码语言:javascript
复制
{{$bar:= index $ing.Annotations "mycompany/bar"}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52787837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档