Сделать nginx настраиваемым с секретом kubernetes?

У меня есть работающий openresty с lua-resty-openidc в качестве входного контроллера. Теперь nginx.conf жестко закодирован в моем образе примерно так:

    server {
        server_name  _;
        listen       80;

        location /OAuth2Client {
            access_by_lua_block {
                local opts = {
                    discovery = "/.well-known/openid-configuration",
                    redirect_uri = "/authorization-code/callback",
                    client_id = "clientID",
                    client_secret = "clientSecret",
                    scope = "openid profile somethingElse",
                }
    ...
            }
            proxy_pass http://clusterIp/OAuth2Client;
        }
    }

Поскольку Nginx не принимает переменные среды, есть ли простой способ настроить мой nginx.conf, например

    server {
        server_name  ${myServerName};
        listen       ${myServerPort};

        location /${specificProjectRoot} {
            access_by_lua_block {
                local opts = {
                    discovery = "${oidc-provider-dev-url}/.well-known/openid-configuration",
                    redirect_uri = "${specificProjectRoot}/authorization-code/callback",
                    client_id = "${myClientId}",
                    client_secret = "${myClientSecret}",
                    scope = "${myScopes}",
                }
    ...
            }
            proxy_pass http://${myClusterIP}/${specificProjectRoot};
        }
    }

чтобы любая команда в любом пространстве имен могла повторно использовать мой образ и просто предоставить секрет kubernetes, содержащий их конкретную конфигурацию для своего проекта?


person Aramsham    schedule 09.04.2020    source источник
comment
Что, если вы создадите start_script.sh для запуска при каждом запуске вашего nginx? В сценарии вы можете использовать переменные среды и с помощью sed вы можете заменить значения в вашем nginx.conf. как-то так: sed -i -e "s,\${myServerName},$SERVER_NAME," /etc/nginx/nginx.conf   -  person Juliano Costa    schedule 09.04.2020


Ответы (1)


Вам нужно будет отобразить nginx.conf из шаблонной версии во время выполнения (как упоминается в комментарии Джулиано). Для этого ваш Dockerfile может выглядеть примерно так:

FROM nginx
COPY nginx.conf.template /etc/nginx/
CMD ["/bin/bash", "-c", "envsubst < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf && exec nginx -g 'daemon off;'"]

Обратите внимание, что он копирует nginx.conf.template в ваш образ, это будет ваша шаблонная конфигурация с переменными в форме ${MY_SERVER_NAME}, где MY_SERVER_NAME — это внедряется в ваш модуль как переменная среды через манифест Kubernetes, из вашей карты конфигурации или секрета или как вы предпочитаете.

person snormore    schedule 09.04.2020