如何在Helm NginX Ingress控制器上使用ConfigMap配置-Kubernetes

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加载配置?

adn*_*ili 9

也可以在安装时传递 config mag 属性:

helm install stable/nginx-ingress --name nginx-ingress --set controller.config.use-forwarded-headers='"true"'
Run Code Online (Sandbox Code Playgroud)

注意:对于非字符串值,必须在双引号周围使用单引号才能使其工作。


Nev*_*eue 7

我设法使用命令--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)

可以在此处找到配置属性列表。

  • `--configmap`不是头盔的公认标志。虽然我可以轻松地创建配置映射和nginx入口,但我仍然不知道如何将两者链接在一起。入口未从配置映射中获取属性。 (2认同)

Yeh*_*rov 5

如果您曾经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。了解更多的人应该帮助充实它们,这样人们就不需要不必要地偶然发现这一点。

干杯,谢谢你的帖子。