-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add option to preset kong-admin url and not change it #39
Comments
@cronventis King is made with Angular framework, in a serverless way. It is executed in the browser. So there is no place to have variables defined, like environment, files, etc. To archieve what you need, you must made a mix of modifications in Kings code to hardcode the Kong Admin url, and then configure the dockerfile to modify the file with this url to adapt it to the cluster it is being deployed. Other option but based in something similar, is to deploy King + a server like apache to serve it (I don't know if you are already using apache or nginx...), and then serve with apache a json file as an static resource, e.g https://myserver/file.json. In the json file you can put the kong admin url, and then modify King's code to get this json file and read it. I'm not used to work with docker (but currently I'm learning) so I don't kknow if there are better ways to have "dinamic" deployments depending the cluster you are working with. |
If you enable passing as ENV variable, it will work with a Dockerfile. |
Just as a follow-up: {
"kong_admin_url": "http://example.com/admin",
"username": "admin",
"password": "password123",
"auth_type": "basic"
} Then, I could create a script that replaces the values with data coming from env variables in docker.. Something like this: #!/bin/bash
# Set the file path to your JSON file
json_file=" /usr/share/nginx/html/config.json"
# Update the values using jq
jq '.kong_admin_url = "$KONG_ADMIN_URL"' \
| jq '.username = "$USERNAME"' \
| jq '.password = "$PASSWORD"' \
| jq '.auth_type = "$AUTH_TYPE"' \
"$json_file" > tmp_file && mv tmp_file "$json_file"
# Start the web server
exec "$@" The Dockerfile would look something like this: # build environment
FROM node:20 as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package*.json ./
RUN npm ci --silent
COPY . ./
RUN npm run build
# production environment
FROM nginx:stable-alpine
RUN apk add --no-cache jq
COPY --from=build /app/build /usr/share/nginx/html
COPY startup.sh /usr/local/bin/startup.sh
RUN chmod +x /usr/local/bin/startup.sh
EXPOSE 80
CMD ["/usr/local/bin/startup.sh", "nginx", "-g", "daemon off;"]
The only thing you need to do, Is configure king to use the config.json if it exists..? |
I think I can make some changes to make one request for a json, served as an static resource by the same server that is serving King. I'll take a look at that. And then any help with the docker files would be great, I'm not used to work with it (not yet). Thanks. Edit: I didn't saw the pull request you made when I wrote the comment :P |
I reopen this because I closed it by mistake. @cronventis I've pushed some changes that adds the "config file" functionality as we were talking. Given you have one JSON config file served as a static file, you can set a config-file-url for King (saved in your browser localStorage). You point that url to the json file, and the King will try to read it on load. If it's available then King will use the information in that config file to connect to the Kong node overriding the url in the header field (and maybe more configuration in the future). Of course the CORS problems that may arise must be solved in the web server serving the config file (if the hostname/port are different between King and that json file). (see README.md and the template in the examples folder for more information about the format) Give it a try if you can! PST: I have not implemented the other configuration option of being able to hide or not the kong url node field. In order to "not allow" anyone to connect to another kong node. Although it would be a lie, anyone can change the javascript or html "on live" in their own browser, so I hesitate to implement it or not. |
I forgot. Another thing pending is to set a default config file url. Probably by default will be the current host King is running on "/config.json". So you can automatically "set it up" in the Dockerfile just by creating the config.json file in the same folder as the "index.html" of King. |
Yea, that would be needed.. Otherwise I could also just enter the Kong Admin URL directly.. |
I would like to be able to have a docker image with a kong admin url as environment variable und not be able to change it in the UI
This way I can deploy it for multiple clusters with different urls, without the need to know the admin url.
The text was updated successfully, but these errors were encountered: