2017-12-28 88 views
9

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.

Nginx: https://github.com/kubic-project/caasp-services/blob/master/contrib/helm-charts/portus/templates/nginx-configmap.yaml

ś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 

Odpowiedz

2

nie jestem pewien w jaki sposób prace aplikację i mechanika o tym, jakie dane są przekazywane gdzie, ale podejrzewam, że konieczne może być przekazanie use_ssl=true w parametrze zapytania do punktu końcowego /validate.

Obecnie jest przekazywana use_ssl=false, która prawdopodobnie zwraca odpowiedź bez SSL.

+0

use_ssl jest wywoływana w params i nadal wydaje się nie chcieć pracować – niharvey

Powiązane problemy