2021/11/18
EKSのロードバランサーでIPアドレスのアクセス制限を設定する
EKSで立てているネットワークロードバランサーにipアドレスによるアクセス制限をつける必要があったため対応しました。
結構簡単で、loadBalancerSourceRanges
というプロパティを追加するだけでした。これをつけるとAWS側でこの設定値に基づいてSecurity Groupが自動で更新されていました。(便利ですね)
apiVersion: v1
kind: Service
metadata:
name: your-app
namespace: your-namespace
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
type: LoadBalancer
loadBalancerSourceRanges:
- "XXX.XXX.XXX.XXX/32" # e.g. your office ip
- "YYY.YYY.YYY.YYY/24"
ports:
- name: https
port: 443
targetPort: 443
selector:
app: your-app
ただ、落とし穴もあり、たくさん設定すると、うまく動作しない場合があります。
私の場合は、たくさん設定しすぎてうまく動かなくなり、原因を調査したところ、kubectl describe svc
で以下のメッセージが表示されていて原因が判明しました。
Warning SyncLoadBalancerFailed 60m service-controller (combined from similar events):
Error syncing load balancer: failed to ensure load balancer: error authorizing security group ingress:
"RulesPerSecurityGroupLimitExceeded: The maximum number of rules per security group has been reached.\n\tstatus code: 400, request id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
どうやら、Serurity Groupのルールが60個(デフォルトの上限値)を超えてしまっており、追加しようとしていたip whitelistのrangeを追加できないためでした。
この場合は、うまくip whitelistの設定値を減らして工夫するか、不必要な公開portを削除して対応しましたが、どうしても減らせない場合はAWSでの上限値の変更を行う必要があります。
以上です。
関連する記事

[小〜中規模向け]GKEにTiDBをデプロイする
MySQL互換のNewSQLであるTiDBをGKEにデプロイしてみました。

NATS JetStream Controllerを使ってNATSをGKEにデプロイする
helm chartのnackを使って、NATS JetStreamサーバーをデプロイして、Stream/Consumerをk8sリソースとして管理する

GKEにDragonflydbをデプロイする
redis互換のdragonflydbをGKEにデプロイしました

[GKE]Kafka Strimziをアップグレードする
GKEにデプロイしているKafka Strimzi 0.26.0を0.30.0にアップグレードする