2016-01-12 15 views
6

Khi tiêu đề cho biết, tôi đang tìm cách ép buộc dịch vụ LoadBalancer sử dụng nhóm bảo mật được xác định trước trong AWS. Tôi không muốn phải tự chỉnh sửa các quy tắc vào/ra của nhóm bảo mật được tạo bởi ELern bởi Kubernetes. Tôi đã không thể tìm thấy bất kỳ thứ gì trong tài liệu, cũng như tôi không tìm thấy bất kỳ thứ gì hoạt động ở nơi khác trực tuyến. Đây là mẫu hiện tại của tôi:Kubernetes và AWS: Đặt LoadBalancer để sử dụng Nhóm bảo mật được xác định trước

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 

Trả lời

6

Bạn không thể ngăn Kubernetes tạo nhóm bảo mật mới. Nhưng kể từ khi câu trả lời của Andonaeus đã được gửi một tính năng mới đã được thêm vào cho phép xác định rõ ràng các điều khoản trong nước thông qua tệp cấu hình của dịch vụ của bạn.

Xem the user guide details để biết chi tiết cụ thể. Ví dụ với điều kiện có cho thấy rằng bằng cách sử dụng spec.loadBalancerSourceRanges bạn có thể cung cấp cho phép các IP trong nước:

Trong ví dụ sau, một blancer tải sẽ được tạo ra đó là chỉ có thể cho khách hàng với các địa chỉ IP từ 130.211.204.1 và 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

Có vẻ như điều này hiện không thể thực hiện được. Thông qua mã sau trong 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} 

. 
. 
. 

} 

Không có cách nào để ngăn chặn việc tạo nhóm bảo mật.

Các vấn đề liên quan