2017-07-20 8 views
0

Linuxマシン上のlocalhost上に最小Kubernetesクラスタを設定しています(チェックアウトされたリポジトリからのハック/ローカルアップクラスタから始まります)。私の展開ファイルでは、クラスタ内に展開されているサービスに外部からアクセスできるようにするためのイングレスを定義しました。 Deployment.yml:Kubernetes Ingressにアクセスできない(localhost)

--- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: foo-service-deployment 
spec: 
    replicas: 2 
    template: 
    metadata: 
     labels: 
     app: foo-service 
    spec: 
     containers: 
     - name: foo-service 
      image: images/fooservice 
      imagePullPolicy: IfNotPresent 
      ports: 
      - containerPort: 7778 
--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: foo-service-service 
spec: 
    ports: 
    - port: 7778 
    selector: 
    app: foo-service 
    type: NodePort 
---  
apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: api-gateway-ingress 
spec: 
    rules: 
    - host: 
    http: 
     paths: 
     - path: /foo 
     backend: 
      serviceName: foo-service-service 
      servicePort: 7779 
     - path: /bar 
     backend: 
      serviceName: bar-service-service 
      servicePort: 7776 

サービスにアクセスできません。 kubectlは私の進入のために、以下を示して説明します

Name:   api-gateway-ingress 
Namespace:  default 
Address:   
Default backend: default-http-backend:80 (<none>) 
Rules: 
    Host Path Backends 
    ---- ---- -------- 
    * 
     /foo foo-service-service:7779 (<none>) 
     /bar bar-service-service:7776 (<none>) 
Annotations: 
Events: <none> 

それはまだ外の世界には見えないことを、私の侵入のためにそこに設定したアドレスされていないので、それはありますか?

答えて

3

Ingressリソースは、入力トラフィックをどのように処理するかについてのクラスタの定義に過ぎません。これらの定義を実際に処理するには、入力コントローラが必要です。 Ingressコントローラを配備せずにIngressリソースを作成しても効果はありません。

the documentationから:

進入リソースが動作するためには、クラスタが進入コントローラを実行している必要があります。これは、一般にkube-controller-managerバイナリの一部として実行され、通常はクラスタ作成の一部として自動的に開始される他のタイプのコントローラとは異なります。あなたのクラスタに最適なイングレスコントローラインプリメンテーションを選択するか、インプリメンテーションを実装する必要があります。

例えばNGINX ingress controller(Kubernetesプロジェクトの一部である)、またはTraefikなどのサードパーティの侵入コントローラのようなあなたが(展開リソースを経由して、一般的に)自分で展開できることを利用可能ないくつかの進入コントローラがありますが、 Voyager

関連する問題