2016-01-12 8 views
6

Wie der Titel sagt, suche ich nach einer Möglichkeit, einen LoadBalancer-Dienst zur Verwendung einer vordefinierten Sicherheitsgruppe in AWS zu zwingen. Ich möchte die eingehenden/ausgehenden Regeln der Sicherheitsgruppe, die von Kubernetes für den ELB erstellt wird, nicht manuell bearbeiten müssen. Ich konnte weder etwas in der Dokumentation finden, noch habe ich etwas gefunden, das anderswo online funktioniert. Hier ist meine aktuelle Vorlage:Kubernetes und AWS: LoadBalancer für vordefinierte Sicherheitsgruppe einrichten

apiVersion: v1 
kind: Service 
metadata: 
    name: ds-proxy 
spec: 
    type: LoadBalancer 
    ports: 
    - port: 8761 # the port that this service should serve on 
    targetPort: 8761 
    protocol: TCP 
    selector: 
    app: discovery-service 

Antwort

6

Sie können nicht verhindern, dass Kubernetes eine neue Sicherheitsgruppe erstellt. Aber seit der Antwort von Andonaeus wurde eine neue Funktion hinzugefügt, mit der eingehende Berechtigungen explizit über die Konfigurationsdatei Ihres Dienstes definiert werden können.

Siehe the user guide details für die Besonderheiten. Das Beispiel vorgesehen zeigt, dass spec.loadBalancerSourceRanges durch Verwendung Sie eingehende IP-Adressen erlauben bieten können:

Im folgende Beispiel wird eine Last blancer erstellt werden, die nur von Kunden mit IP-Adressen von 130.211.204.1 und 130.211.204.2 .

apiVersion: v1 
kind: Service 
metadata: 
    name: myapp 
spec: 
    ports: 
    - port: 8765 
     targetPort: 9376 
    selector: 
    app: example 
    type: LoadBalancer 
    loadBalancerSourceRanges: 
    - 130.211.204.1/32 
    - 130.211.204.2/32 
1

Es sieht so aus, als ob dies derzeit nicht möglich ist. Über den folgenden Code in der api, https://github.com/kubernetes/kubernetes/blob/37b5726716231c13117c4b05a841e00417b92cda/pkg/cloudprovider/providers/aws/aws.go:

func (s *AWSCloud) EnsureLoadBalancer(name, region string, publicIP net.IP, ports []*api.ServicePort, hosts []string, affinity api.ServiceAffinity) (*api.LoadBalancerStatus, error) { 
glog.V(2).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v)", name, region, publicIP, ports, hosts) 

. 
. 
. 

// Create a security group for the load balancer 
var securityGroupID string 
{ 
    sgName := "k8s-elb-" + name 
    sgDescription := "Security group for Kubernetes ELB " + name 
    securityGroupID, err = s.ensureSecurityGroup(sgName, sgDescription, vpcId) 
    if err != nil { 
     glog.Error("Error creating load balancer security group: ", err) 
     return nil, err 
    } 

    permissions := []*ec2.IpPermission{} 
    for _, port := range ports { 
     portInt64 := int64(port.Port) 
     protocol := strings.ToLower(string(port.Protocol)) 
     sourceIp := "0.0.0.0/0" 

     permission := &ec2.IpPermission{} 
     permission.FromPort = &portInt64 
     permission.ToPort = &portInt64 
     permission.IpRanges = []*ec2.IpRange{{CidrIp: &sourceIp}} 
     permission.IpProtocol = &protocol 

     permissions = append(permissions, permission) 
    } 
    _, err = s.ensureSecurityGroupIngress(securityGroupID, permissions) 
    if err != nil { 
     return nil, err 
    } 
} 
securityGroupIDs := []string{securityGroupID} 

. 
. 
. 

} 

Es gibt keine Möglichkeit, es zu verhindern, dass eine Sicherheitsgruppe zu schaffen.