Nev*_*eue 8 kubernetes kubernetes-helm kubernetes-ingress nginx-ingress
我找到了有关如何使用ConfigMap配置NginX入口控制器的文档:https : //kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
不幸的是,我不知道并且在任何地方都找不到如何从我的Ingress控制器加载该ConfigMap的信息。
我的入口控制器:
helm install --name ingress --namespace ingress-nginx --set rbac.create=true,controller.kind=DaemonSet,controller.service.type=ClusterIP,controller.hostNetwork=true stable/nginx-ingress
Run Code Online (Sandbox Code Playgroud)
我的配置图:
kind: ConfigMap
apiVersion: v1
metadata:
name: ingress-configmap
data:
proxy-read-timeout: "86400s"
client-max-body-size: "2g"
use-http2: "false"
Run Code Online (Sandbox Code Playgroud)
我的入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- my.endpoint.net
secretName: ingress-tls
rules:
- host: my.endpoint.net
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 443
- path: /api
backend:
serviceName: api
servicePort: 443
Run Code Online (Sandbox Code Playgroud)
如何使我的Ingress从ConfigMap加载配置?
也可以在安装时传递 config mag 属性:
helm install stable/nginx-ingress --name nginx-ingress --set controller.config.use-forwarded-headers='"true"'
Run Code Online (Sandbox Code Playgroud)
注意:对于非字符串值,必须在双引号周围使用单引号才能使其工作。
我设法使用命令--dry-run --debug
末尾的:选项显示了Helm执行的YAML helm install
。然后我注意到那里的控制器是用:执行的--configmap={namespace-where-the-nginx-ingress-is-deployed}/{name-of-the-helm-chart}-nginx-ingress-controller
。为了加载您的ConfigMap,您需要使用自己的ConfigMap覆盖它(检查名称空间)。
kind: ConfigMap
apiVersion: v1
metadata:
name: {name-of-the-helm-chart}-nginx-ingress-controller
namespace: {namespace-where-the-nginx-ingress-is-deployed}
data:
proxy-read-timeout: "86400"
proxy-body-size: "2g"
use-http2: "false"
Run Code Online (Sandbox Code Playgroud)
可以在此处找到配置属性列表。
如果您曾经helm install
安装过 ingress-nginx,如果没有传递 nginx 控制器应该查看的 ConfigMap 的明确值,则默认值似乎是 {namespace}/{release-name}-nginx-ingress-controller。这是由https://github.com/helm/charts/blob/1e074fc79d0f2ee085ea75bf9bacca9115633fa9/stable/nginx-ingress/templates/controller-deployment.yaml#L67生成的。(如果是死链接,请参阅类似内容)。
要亲自验证,请尝试找到安装 ingress-nginx 图表所使用的命令,并将其添加--dry-run --debug
到该命令中。这将向您显示 Tiller 生成的要应用于集群的 yaml 文件。该线路# Source: nginx-ingress/templates/controller-deployment.yaml
开始控制器部署,其arg
具有--configmap=
. 该值arg
需要是 ConfigMap 的名称,以便控制器感知并用于更新其自己的.conf
文件。这可以显式传递,但如果不是,它将有一个默认值。
如果使用正确的名称创建 ConfigMap,控制器的日志将显示它已获取配置更改并自行重新加载。
这可以通过 进行验证kubectl logs <pod-name-of-controller> -n <namespace-arg-if-not-in-default-namespace>
。我的日志消息包含文本Configuration changes detected, backend reload required.
如果 ConfigMap 名称错误,这些日志消息将不会出现。
我相信这方面的官方文档不必要地缺乏,但也许我是错的?我会尝试提交包含这些详细信息的 PR。了解更多的人应该帮助充实它们,这样人们就不需要不必要地偶然发现这一点。
干杯,谢谢你的帖子。
归档时间: |
|
查看次数: |
3897 次 |
最近记录: |