Rozmieszczanie Portus w GCP z zaimplementowanym mechanizmem równoważenia obciążenia Nginx Ingress. Portus ładuje się po prostu w porządku, ale gdy próbuje korzystać z aplikacji i wypełnić niektóre z form pojawia się następujący błąd: konfiguracjęBłąd zawartości mieszanej nginx ingress w kernernetes dla aplikacji rails
VM798:1 Mixed Content: The page at ' https://staging.foo.bar/admin/registries/new ' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ' http://staging.foo.bar//api/v1/registries/validate?name=devreg&hostname=staging-foo-barregistry%3A5000&external_hostname=&use_ssl=false&force=false&only%5B%5D=hostname '. This request has been blocked; the content must be served over HTTPS.
środowiska:
- Kubernetes w GCP
- wszystkie zasoby wdrożone za pośrednictwem hełmu
- ssl jest dostarczane przez kube-lego
- Rails app z winogron API gem
- Grape montuje api następująco:
mount API::RootAPI => "/"
Więc zrobiłem sprawdzić kod ręcznych połączeń HTTP i nie widać nic. A ja spędziłem dzień próbując przekopać się przez dokumenty z prowadnicami i dokumentami nginx, aby zobaczyć, co powoduje, że niektóre aplikacje ładują się poprawnie z SSL, a interfejs API nie jest zgodny z tymi samymi regułami.
----- Aktualizacja 1 ------ Po dalszych badaniach wygląda na to, że ma to coś wspólnego z walidatorem Vue. Sprawdzanie narzędzi programistycznych ujawniły następujące:
curl ' http://staging.foo.bar//api/v1/registries/validate?name=devreg&hostname=st&external_hostname=&use_ssl=false&force=false&only%5B%5D=name ' -X OPTIONS -H 'Access-Control-Request-Method: GET' -H 'Origin: https://staging.foo.bar ' -H 'Access-Control-Request-Headers: x-csrf-token' --compressed
I wygląda na to URL korzeń jest nazywana jest tutaj:
javascript:
window.API_ROOT_URL = '#{root_url}';
root_url ustawiony jest/jak wspomniano powyżej.
Jednak analizując kod Vue bliżej upaja:
Vue.http.options.root = window.API_ROOT_URL;
Vue.http.interceptors.push((_request, next) => {
window.$.active = window.$.active || 0;
window.$.active += 1;
next(() => {
window.$.active -= 1;
});
});
Vue.http.interceptors.push((request, next) => {
if ($.rails) {
// eslint-disable-next-line no-param-reassign
request.headers.set('X-CSRF-Token', $.rails.csrfToken());
}
next();
});
// we are not a SPA and when user clicks on back/forward
// we want the page to be fully reloaded to take advantage of
// the url query params state
window.onpopstate = function (e) {
// phantomjs seems to trigger an oppopstate event
// when visiting pages, e.state is always null and
// in our component we set an empty string
if (e.state !== null) {
window.location.reload();
}
};
Vue.config.productionTip = process.env.NODE_ENV !== 'production';
Params są skonfigurowane do korzystania z protokołu SSL w zapytaniu
params do
requires :name,
using: API::Entities::Registries.documentation.slice(:name)
requires :hostname,
using: API::Entities::Registries.documentation.slice(:hostname)
optional :external_hostname,
using: API::Entities::Registries.documentation.slice(:external_hostname)
requires :use_ssl,
using: API::Entities::Registries.documentation.slice(:use_ssl)
optional :only, type: Array[String]
end
use_ssl jest wywoływana w params i nadal wydaje się nie chcieć pracować – niharvey