2017-03-04 229 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