Kubernetes - nginx angularjs POD动态访问集群内的nodejs REST API url(另一个POD)

时间:2015-11-18 15:27:42

标签: kubernetes google-kubernetes-engine

使用Kubernetes - Gogle Container Enginer设置,在同一个Google云群集中,我有前端服务 - > nginx + Angular JS和REST API服务 - > NodeJS API。我不想公开NodeJS API KubeCTL服务公共域。所以,' ServiceType'仅设置为“ClusterIP' 。我们如何在AngularJS程序中推断出NODE_API_SERIVCE_HOST,NODE_API_SERIVCE_PORT - {SVCNAME} _SERVICE_HOST和{SVCNAME} _SERVICE_PORT。

 (function() {
'use strict';

angular
    .module('mymodule', [])
    .config(["RestangularProvider", function(RestangularProvider) {
      var apiDomainHost = process.env.NODE_API_SERVICE_HOST;
      var apiDomainPort = process.env.NODE_API_SERVICE_PORT;
      RestangularProvider.setBaseUrl('https://'+apiDomainHost+':'+apiDomainPort+'/node/api/v1');        }]);
 })();

然后这将不起作用(ReferenceError:process未定义),因为这些angularjs代码在客户端执行。

我的docker文件很容易继承nginx停止/启动控件。

FROM nginx
COPY public/angular-folder /usr/share/nginx/html/projectSubDomainName

[{3}}中的第43页,共62页,解释说我们可以调用命令sh

 "containers": {
     {
      "name":"container-name",
      "command": {
        "sh" , "sudo nginx Command-line parameters
    'https://$NODE_API_SERVICE_HOST:$NODE_API_SERVICE_PORT/node/api/v1'"
 }
 }
 }

这是否可以重新启动POD?如果是这样,我如何在AngularJS中获得此变量?

1 个答案:

答案 0 :(得分:1)

  

然后这将不起作用(ReferenceError:process未定义),因为这些angularjs代码在客户端执行。

如果客户端位于群集之外,那么它能够访问NodeJS API的唯一方法就是将其暴露给客户端的网络,这可能是公共互联网。如果您担心安全问题,可以采用多种不同方式对服务进行身份验证,例如使用nginx auth_basic

"containers": {
   {
    "name":"container-name",
    "command": {
      "sh" , "sudo nginx Command-line parameters
   'https://$NODE_API_SERVICE_HOST:$NODE_API_SERVICE_PORT/node/api/v1'"
 }
 }
 }
     

这是否可以重新启动POD?如果是这样,我如何在AngularJS中获得此变量?

是的,服务IP&端口是稳定的,即使在pod重启时也是如此。至于如何将NODE_API_SERVICE_ {HOST,PORT}变量传递给客户端,您需要将它们从运行服务器端的进程(在您的集群内)注入到响应中(例如直接插入到JS代码中,或作为JSON响应) )。