2017-03-04 172 views
0

如果我有一个域名www.domain.com已注册,并且我有新的kubernetes群集已启动并正在运行。我已成功推出DeploymentsServices以公开要求。Kubernetes群集APP DNS

服务在我的GCE群集上创建LoadBalancer,当我试图通过外部IP访问我的APP它的工作。

但是,这就是我想实现理想:

路由所有的流量,我的应用程序为www.app.domain.comwww.app2.domain.com。经过研究,我发现我需要一个Ingress Controller,最好是NGINX服务器,我一直试图做到这一点,并失败悲惨。

这是服务暴露JSON我的部署:

{ 
    "kind": "Service", 
    "apiVersion": "v1", 
    "metadata": { 
     "name": 'node-js-srv' 
    }, 

    "spec": { 
     "type": 'LoadBalancer', 
     "label": { 
      'app': 'node-js-srv' 
     }, 

     "ports": [ 
     { 
      "targetPort": 8080, 
      "protocol": "TCP", 
      "port": 80, 
      "name": "http" 
     }, 
     { 
      "protocol": "TCP", 
      "port": 443, 
      "name": "https", 
      "targetPort": 8080 
     } 
     ], 
     "selector": { 
      "app": 'node-js' 
     }, 
    } 
} 
+0

nginx哪部分你没有工作?反向代理不是那么困难 –

+0

@ cricket_007我一直无法弄清楚ngnix润滑油配置yaml应该如何。我假设'customdomain.com'为我的注册域...并让我的应用程序在'app.customdomain.com'上负载平衡....我对整个网络和开发人员真的很陌生...... – kt14

+0

I '不熟悉kubernetes,只是nginx配置 –

回答

0

GCE/GKE已具有Ingress Controller,你可以使用一个。

您必须指定您的服务为NodePort类型,并从类型Ingress 看到的ressource: https://kubernetes.io/docs/user-guide/ingress/

您找到GCE这里https://github.com/kubernetes/ingress/tree/master/examples/deployment/gce

服务例如:

{ 
    "kind": "Service", 
    "apiVersion": "v1", 
    "metadata": { 
     "name": 'node-js-srv' 
    }, 

    "spec": { 
     "type": 'NodePort', 
     "label": { 
      'app': 'node-js-srv' 
     }, 

     "ports": [ 
     { 
      "targetPort": 8080, 
      "protocol": "TCP", 
      "port": 80, 
      "name": "http" 
     }, 
     { 
      "protocol": "TCP", 
      "port": 443, 
      "name": "https", 
      "targetPort": 8080 
     } 
     ], 
     "selector": { 
      "app": 'node-js' 
     }, 
    } 
} 

入口:

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: test 
spec: 
    rules: 
    - host: www.app.domain.com 
    http: 
     paths: 
     - backend: 
      serviceName: node-js-srv 
      servicePort: 80 
    - host: www.app2.domain.com 
    http: 
     paths: 
     - backend: 
      serviceName: xyz 
      servicePort: 80 
+0

你确定需要NodePort吗?使用入口控制器时,它应该在没有NodePort的情况下工作。另外,可能需要更多的工作来设置DNS。 DNS记录必须指向GCE/GKE集群公开的某个内容,可以是负载平衡器IP或CNAME。不知道谷歌如何解决这个问题,但是... –

+0

在GCE/GKE NodePort是必需的,请参阅https://github.com/kubernetes/kubernetes/issues/26508。 – Sebastian

+0

Ingress可以更轻松地管理DNS。入口创建一个带有IP的负载均衡器,您可以创建一个通配符DNS条目,例如* .domain.com。之后,kubernetes将流量路由到正确的服务 – Sebastian