Tengo un openresty en funcionamiento con lua-resty-openidc como controlador de ingreso. Ahora, el nginx.conf está codificado en mi imagen, con algo como esto:
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; } }Como Nginx no acepta variables de entorno, ¿existe una forma sencilla de hacer que mi nginx.conf sea configurable, por ejemplo?
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}; } }¿Para que cualquier equipo en cualquier espacio de nombres pueda reutilizar mi imagen y simplemente proporcionar un secreto de kubernetes que contenga su configuración específica para su proyecto?
Debería renderizar nginx.conf desde una versión con plantilla en tiempo de ejecución (como menciona el comentario de Juliano). Para hacer esto, su Dockerfile podría verse así:
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;'"] Tenga en cuenta que copia nginx.conf.template en su imagen, esta sería su configuración de plantilla con variables en el formulario ${MY_SERVER_NAME} donde MY_SERVER_NAME se inyecta en su pod como una variable de entorno a través de su manifiesto de Kubernetes, desde su mapa de configuración o secreto o como prefieras.