タイトルが示すように、私はLoadBalancerサービスにAWSで事前定義されたセキュリティグループを使用するように強制する方法を探しています。 KubernetesによってELB用に作成されたセキュリティグループのインバウンド/アウトバウンドルールを手動で編集する必要はありません。ドキュメント内で何も見つけることができず、オンラインの他の場所で機能するものも見つけられませんでした。これが私の現在のテンプレートです:
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
Kubernetesが新しいセキュリティグループを作成するのを防ぐことはできません。ただし、Andonaeusの回答が送信されてから、サービスの構成ファイルを介してインバウンド権限を明示的に定義できる新機能が追加されました。
詳細については、 ユーザーガイドの詳細 を参照してください。そこで提供されている例は、spec.loadBalancerSourceRanges
を使用することにより、許可インバウンドIPを提供できることを示しています。
次の例では、IPアドレスが130.211.204.1および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
Kubernetesによる新しいセキュリティグループの作成を制限することはできませんが、ドキュメントに記載されているように、アノテーションを使用して既存のセキュリティグループを指定できます。
service.beta.kubernetes.io/aws-load-balancer-extra-security-groups: "sg-53fae93f、sg-42efd82e"-> ELBに追加される追加のセキュリティグループのリスト
この投稿は2、3年前のものだと思いますが、グーグル検索で思いついたものです。 k8s 1.7以降では、kubernetesがセキュリティグループを作成するのを防ぐことができるようになりました。詳細については、 https://github.com/kubernetes/kops/blob/release-1.9/docs/cluster_spec.md#cloudconfig を参照してください。
現在、これは不可能のようです。 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}
.
.
.
}
セキュリティグループの作成を防ぐ方法はありません。