【问题标题】:Kubernetes - nginx angularjs POD to access nodejs REST API url (another POD) within the cluster dynamicallyKubernetes - nginx angularjs POD 动态访问集群内的 nodejs REST API url(另一个 POD)
【发布时间】:2015-11-19 02:36:37
【问题描述】:

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

 (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 is not defined),因为这些 angularjs 代码是在客户端执行的。

我的docker文件简单继承了nginx停止/启动控件。

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

http://www.slideshare.net/carlossg/scaling-docker-with-kubernetes 中的第 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 中获取这个变量?

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

    那么这将不起作用(ReferenceError: process is not defined),因为这些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 响应) )。

    【讨论】:

    • 好的。对于生产,我将公开 Secure NodeJS 服务,因为 NODE_API_SERVICE_{HOST,PORT} 公共 IP 是稳定的,我们正在考虑使用以下格式。 github.com/kudresov/angular-config-vars 。但是对于开发实例,我将 nginx 容器和 nodejs 容器都放在同一个集群中。我还应该公开 NodeJS SERVICE 吗?或者有什么替代品?
    猜你喜欢
    • 2023-04-03
    • 2020-09-10
    • 1970-01-01
    • 2019-12-16
    • 2021-10-16
    • 2019-02-08
    • 1970-01-01
    • 2016-09-28
    • 2019-02-24
    相关资源
    最近更新 更多