在当前的Rancher environment上,我们根据对Rancher元数据的调用动态配置Nginx配置,使用容器上的标签来确定容器是否包含在Nginx路由中。
我们使用带有confd后端的Rancher来完成元数据检查,并动态地更改/重新加载新的Nginx配置。
我们已经开始致力于迁移到Kubernetes (AWS )。是否有与此confd/Rancher等效的Kubernetes?
由于一些技术原因和时间范围的原因,我们目前无法用等效的nginx替换这个ingress,因此正在研究如何使用服务/豆荚上的注释或标签来保持动态配置功能。
发布于 2018-10-14 06:20:43
托管的Kubernetes提供程序通常不会让您直接访问后台etcd,因此您最好的选择是为您感兴趣的资源挖掘Kubernetes API并生成您的配置。
这正是入口控制器所做的-监视Kubernetes资源的变化,并为像nginx这样的负载均衡器生成配置。
其中一个nginx控制器允许您使用用您自己的模板完全替换它使用的模板。。
NGINX模板位于文件/etc/nginx/ template /nginx.tmpl中。 使用卷,就可以使用自定义模板。这包括使用Configmap作为模板的源。
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更改为复制控制器定义中群集的唯一值。
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'然后对遗留服务进行注释,使用以下方法将资源分配给该入口:
metadata:
name: foo
annotations:
kubernetes.io/ingress.class: "nginx-legacy"发布于 2018-12-20 23:07:58
为了进一步了解我们最终发现了什么,这要感谢Scott的回答。
使用nginx自定义模板技术,我们能够动态地配置nginx配置,方法是在Ingress资源中使用注释并在nginx自定义模板中引用它们。
具有定义为以下内容的信息共享资源元数据:
metadata:
name: foo
annotations:
kubernetes.io/ingress.class: "nginx-legacy"
mycompany/bar: "path_to_service"在自定义Nginx模板(location块)中,查看注释是否存在:
{{if index $ing.Annotations "mycompany/bar"}}要从注释中获取值,请执行以下操作:
{{$bar:= index $ing.Annotations "mycompany/bar"}}https://stackoverflow.com/questions/52787837
复制相似问题