2016-07-13 14 views
0

次のyamlを使用してサービスを作成しようとしています。ご覧のとおり、私は10.0.0.0/8の範囲からサービスへのアクセスを制限しようとしています。どのようにしてKubernetesサービスへのアクセスを制限できますか?

apiVersion: v1 
kind: Service 
metadata: 
    name: nginx-service 
spec: 
    ports: 
    # the port that this service should serve on 
    - port: 443 
     targetPort: 443 
    # label keys and values that must match in order to receive traffic for this service 
    selector: 
    name: nginx 
    type: LoadBalancer 
    loadBalancerSourceRanges: 
    - 10.0.0.0/8 

サービスへのアクセスを制御するためにloadBalancerSourceRangesアノテーションを使用する方法について説明します(下記参照)、いくつかのKubernetes文書があります。

http://kubernetes.io/docs/user-guide/services-firewalls/

私は、このサービスを作成しようとすると、「SDP-cluster.yamlを」有効

エラー、次のようにしかし、私はエラーを取得する:エラーの検証データのための: 無効なフィールドloadBalancerSourceRangesを見つけましたがv1.ServiceSpec;あなたはこれらのエラーを無視することを選択した場合 、 --validate = falseを

と検証をオフにし、私はv1.ServiceSpecを見て、あまりにもそこにそれを見つけることができませんでした。

何か不足していますか? Kubernetesでサービスへのトラフィックを制限するにはどうすればよいですか?

答えて

0

問題を見つけて修正しました。バージョン1.2はフィールド 'loadBalancerSourceRanges'をサポートしていませんが、注釈としてサポートしています。それで、私のyamlを次のように修正し、うまくいきました。

apiVersion: v1 
kind: Service 
metadata: 
    name: nginx-service 
    annotations: 
    service.beta.kubernetes.io/load-balancer-source-ranges: "a.b.c.d/8, x.y.0.0/24" 
spec: 
    ports: 
    # the port that this service should serve on 
    - port: 443 
     targetPort: 443 
    # label keys and values that must match in order to receive traffic for this service 
    selector: 
    name: nginx 
    type: LoadBalancer 
+0

現時点では0.0.0.0/0に制限することしかできません。この例は機能しません。 https://github.com/kubernetes/kubernetes/blob/f4738ff575ae625914e8dfb93f5af04dea22b1d7/pkg/cloudprovider/providers/aws/aws.go#L73のコードを参照してください。 – user2707671

1

loadBalancerSourceRangesは1.3のフィールドに昇格されました。 https://github.com/kubernetes/kubernetes/blob/master/pkg/api/service/annotations.go#L27という名前の注釈がありました(1.2節の機能が存在して以来)、これはフィールドに昇格して以来廃止されています。

アノテーション/フィールドはwhilelistですが、サポートされているクラウドプロバイダでのみ動作することに注意してください。これを10.0/8に設定すると、からエンドポイントにアクセスすることができます。 kubeクラスタ内(つまり、loadbalancer ipはclusterIPのように動作します)。同じクラウドプロバイダー内のクラスタ外のノードであっても、パブリックIPを攻撃するためにはNATが必要になります。つまり、パケットの送信元IPは10ドットではないため、ファイアウォールを通過しません。あなたはパブリックIPに設定することができ、そのクライアントだけがあなたのサービスにアクセスできるようになります。

+0

おかげプラシャンスB.私はあなたが投稿したものについて読んでいた質問を投稿する前に。しかし、バージョン1.2では正しい指示やコードサンプルはありませんでした。だから私はしばらく推測し続けました。その後、私は修正を見つけました。 – Sanjeet

1

誰かが同じ問題に遭遇した場合に私は気がついた。 Google Container EngineはKubernetes 1.3にアップグレードされたようです。つまり、新しいloadBalancerSourceRanges構文の検証に失敗しないのですが、実際には新しい構文をサポートしていないようです。つまり、フィールドは無視されます。今のところ、アノテーションを設定する必要があります。そうしないと、ロードバランサが公開されることになります。

2

これはGCE、GKE、AWSでサポートされるようになりました。プロバイダがサポートしていない場合は無視されます。 Kubernetes Doc

apiVersion: v1 
 
kind: Service 
 
metadata: 
 
    name: myapp 
 
spec: 
 
    ports: 
 
    - port: 8765 
 
     targetPort: 9376 
 
    selector: 
 
    app: example 
 
    type: LoadBalancer 
 
    loadBalancerSourceRanges: 
 
    - 10.0.0.0/8

関連する問題