2017-09-30 8 views
1

私はインターネットからアクセスできるサーバにミニキューブをインストールしました。Kubernetes Ingressがnginxの逆プロキシの背後で動作しています

>kubectl get service myservice 
NAME  CLUSTER-IP EXTERNAL-IP PORT(S)  AGE 
myservice 10.0.0.246 <nodes>  80:31988/TCP 14h 

minikubeのIPアドレスは次のとおりです:

>minikube ip 
192.168.42.135 

私はhttp://myservice.myhost.com(すなわち、ポート80)にマッピングするためのURLをご希望の

私が利用可能であるkubernetesサービスを作成しましたminikubeのサービス。

私はホスト上で実行されているnginxを持っています(kubernetesと全く関係ありません)。仮想ホストを設定してURLを192.168.42.135:31988(ノードポート)にマッピングしても問題ありません。

私は入り口を使いたいと思います。私はイングレスを追加して有効にしました。しかし、私はわからないのだ:

a)にYAMLファイルが

Bを含めるべきか)どのように着信ポート80上のトラフィック、ブラウザから、入力およびminikubeにリダイレクトされます。

c)まだリバースプロキシとしてnginxを使用する必要がありますか?

d)そうであれば、ingress-nginxが実行されているアドレスは(トラフィックをマップできるように)

答えて

0

@silverfoxで述べたように、入力コントローラが必要です。あなたはこのようminikubeで進入コントローラを有効にすることができます。

minikube addons enable ingress 

Minikubeはminikube ipによると、IP 192.168.42.135上で実行されます。入力アドオンを有効にした後、ポート80もリッスンします。しかし、これは、ポート80からミニクーバへの呼び出しをプロキシするために、ホスト上でnginxのようなリバースプロキシが必要であることを意味します。

minikubeで入力を有効にした後、私は入力ファイル(myservice-ingress)を作成しました。YAML):これは、それが一致する必要があり、「ホスト」が含まれている必要がありますので、@silverfoxによって与えられた答えに異なっていること

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: myservice-ingress 
    annotations: 
    ingress.kubernetes.io/rewrite-target:/
spec: 
    rules: 
    - host: myservice.myhost.com 
     http: 
     paths: 
     - path:/
      backend: 
      serviceName: myservice 
      servicePort: 80 

注意。このファイルを使用して

は、私が進入するのを作成しました:

kubectl create -f myservice-ingress.yaml 

は最後に、私はminikubeに外部からのプロキシトラフィックに(minikubeの外を実行している)nginxのに仮想ホストを追加しました:

server { 
    listen 80; 
    server_name myservice.myhost.com; 
    location/{ 
    proxy_set_header Host   $host; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_pass http://192.168.42.135; 
    } 
} 

Hostヘッダーは、イングレスがサービスに一致させるためにヘッダーを通過する必要があります。それが通過しない場合、minikubeは要求をサービスに一致させることができません。

上記の仮想ホストを追加した後、nginxを再起動することを忘れないでください。

2

セットアップ

まず、nginx ingress controllerが必要です。

nginxのインスタンスは、ホスト80と443ポートでリッスンし、すべてのHTTP要求を、このように設定が定義されているサービスにリダイレクトします。

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: my-service-ingress 
annotations: 
    # by default the controller redirects (301) HTTP to HTTPS, 
    # the following would make it disabled. 
    # ingress.kubernetes.io/ssl-redirect: "false" 
spec: 
    rules: 
    - http: 
     paths: 
     - path:/
     backend: 
      serviceName: myservice 
      servicePort: 80 

使用https://{host-ip}/ MYSERVICEを訪問すると、ホストは、nginxのコントローラがで実行されているものであるべきです。

は、通常は別のnginxのは、外部のクラスタをkubernetes必要はありません。

Minikubeは少し異なりますが、ホストではなく仮想マシンでkubernetesを実行しています。

ホストのようなポートフォワードを行う必要があります:80 => minikube:80、ホストでリバースプロキシ(nginxなど)を実行するのはエレガントな方法です。

setting virtual networking port forward in Virtualboxでも行うことができます。

+0

私はminikubeが "普通の" kubernetesと違うと思うのですが、それはそれ自身のIPアドレスを持っているからです。そして、nginxはminikubeにリクエストをプロキシする必要があります。しかし、ヒントをありがとう。 –

関連する問題