2016-07-13 5 views
0

Ich versuche, einen Dienst mit folgenden Yaml zu erstellen. Wie Sie sehen können, versuche ich den Zugriff auf den Dienst vom Bereich 10.0.0.0/8 zu beschränken.Wie schränke ich den Zugang zum Kubernetes-Service ein?

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 

Es gibt ein paar Kubernetes Dokumente (siehe unten), die darüber diskutieren, wie loadBalancerSourceRanges Anmerkung verwenden Service-Zugang zu kontrollieren.

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

aber wenn ich versuche, diesen Dienst zu erstellen, bekomme ich einen Fehler wie folgt

Fehler „SDP-cluster.yaml“ Validieren: Fehler Validierung Daten: Ergebnis ungültiges Feld loadBalancerSourceRanges für v1.ServiceSpec; wenn Sie wählen, um diese Fehler zu ignorieren, schalten Validierung ab mit --validate = false

ich am v1.ServiceSpec geschaut und konnte es nicht dort finden.

Fehle ich etwas? Wie kann ich den Verkehr auf einen Dienst in Kubernetes beschränken?

Antwort

0

Das Problem gefunden und behoben. Version 1.2 unterstützt das Feld 'loadBalancerSourceRanges' nicht, unterstützt es jedoch als Annotation. Also habe ich mein Yam wie folgt repariert und es hat gut funktioniert.

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

Im Moment ist es nur möglich, auf 0.0.0.0/0 zu beschränken. Das Beispiel kann nicht funktionieren. Siehe Code unter https://github.com/kubernetes/kubernetes/blob/f4738ff575ae625914e8dfb93f5af04dea22b1d7/pkg/cloudprovider/providers/aws/aws.go#L73 – user2707671

1

loadBalancerSourceRanges wurde nur in ein Feld in 1.3 hochgestuft. Es war schon immer eine Anmerkung namens https://github.com/kubernetes/kubernetes/blob/master/pkg/api/service/annotations.go#L27 (nun, da das Feature in 1.2 existierte), die nun veraltet ist, seit wir sie in ein Feld befördert haben.

Beachten Sie, dass die Annotation/Feld eine Whitelist ist, aber es funktioniert nur auf unterstützten Cloud-Anbietern. Wenn Sie es auf 10.0/8 setzen, können Sie nur auf die Endpunkte von innerhalb Ihres kube-Clusters zugreifen (d. H., Der loadbalancer ip verhält sich wie ein clusterIP). Selbst ein Knoten außerhalb Ihres Clusters innerhalb des gleichen Cloudproviders muss NAT haben, um die öffentliche IP zu treffen, was bedeutet, dass die Quell-IP auf dem Paket kein 10-Punkt ist, so dass es die Firewall nicht passieren wird. Sie können es auf eine öffentliche IP-Adresse einstellen und nur dieser Client kann zu Ihrem Dienst gelangen.

+0

Dank Prashanth B. Bevor die Frage Entsendung ich gelesen hatte, was Sie gebucht haben. Es gab jedoch keine spezifischen Anweisungen oder Code-Beispiele, um es in Version 1.2 richtig zu machen. So hat es mich eine Weile im Zaum gehalten. Dann habe ich die Lösung gefunden. – Sanjeet

1

Nur eine kleine Ergänzung fand ich für den Fall, dass jemand in das gleiche Problem läuft. Es scheint, dass Google Container Engine auf Kubernetes 1.3 aktualisiert wurde, was bedeutet, dass es nicht fehlschlägt, die neue loadBalancerSourceRanges-Syntax zu validieren, aber es scheint die neue Syntax nicht wirklich zu unterstützen, was bedeutet, dass das Feld ignoriert wird. Im Moment ist es noch erforderlich, die Annotation zu setzen, oder der Load Balancer wird öffentlich verfügbar sein.

2

Dies wird jetzt von GCE, GKE und AWS unterstützt. Wenn der Provider es nicht unterstützt, wird es ignoriert. 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