2017-05-04 134 views
1

我使用kubernetes 1.3.0設置kubernetes環境,並在同一臺主機上運行master和node,我運行一個RC的tomcat web應用程序,一個docker服務,運行狀況良好,可以通過curl命令通過內部網絡訪問服務,但是當我嘗試使用公共IP從Internet訪問服務時,它是失敗的。無法通過外部網絡訪問kubernetes服務

的RC配置爲:

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: myweb 
spec: 
    replicas: 2 
    selector: 
     app: myweb 
    template: 
     metadata: 
     labels: 
      app: myweb 
     spec: 
     containers: 
     - name: myweb 
      image: kubeguide/tomcat-app:v1 
      ports: 
      - containerPort: 8080 
      env: 
      - name: MYSQL_SERVICE_HOST 
      value: "mysql" 
      - name: MYSQL_SERVICE_PORT 
      value: '3306' 

的服務配置是:

apiVersion: v1 
kind: Service 
metadata: 
    name: myweb 
spec: 
    type: NodePort 
    ports: 
    - port: 8080 
     nodePort: 30001 
    selector: 
    app: myweb 

正如你看到的,服務監聽30001端口,當端口通過Kubernetes服務聽,就不能通過Internet訪問,但是當我在同一主機上使用 nc -l 30001 命令時,它可以通過Internet訪問,這意味着系統層的網絡配置很好。

對於主機的iptables設置,我接受所有連接,但問題仍然出現。

那麼爲什麼我可以通過kubernetes服務訪問它?有沒有我想念的配置?

回答

0

要使用主機網絡公開kubernetes服務,您可以使用Ingress規則。

請參考:https://kubernetes.io/docs/concepts/services-networking/ingress/

在你的情況下,入口規則將作如下。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nginx-test spec: rules: - host: test.example.com http: paths: - backend: serviceName: myweb servicePort: 30001 path:/

+0

謝謝,夥計們。我不這樣做,因爲我發現這是kubernetes的先進技巧,我將在未來的研究中嘗試它。但是我做了類似於你用nginx proxypass所說的那樣,它可以工作,應用程序可以被訪問。 –