VPC設定の確認
アプリケーションポッド、kube-dnsサービス、CoreDNSポッド間のDNSトラフィックは、多くの場合、複数のノードやVPCサブネットを通過します。VPCレベルでDNSトラフィックが自由に流れることができることを確認する必要があります。
備考
ネットワークトラフィックをフィルタリングする2つの主なVPCコンポーネント:
- Security Groups
- Network ACL
ワーカーノードのSecurity GroupsとサブネットのNetwork ACLの両方が、DNSトラフィック(ポート53 UDP/TCP)を双方向で許可していることを確認する必要があります。
ステップ1 - ワーカーノードのSecurity Groupsを特定する
まず、クラスターワーカーノードに関連付けられているSecurity Groupsを特定しましょう。
クラスター作成時、EKSはクラスターエンドポイントと全てのManaged Nodesの両方に関連付けられるクラスターSecurity Groupを作成します。追加のSecurity Groupsが構成されていない場合、これがワーカーノードのトラフィックを制御する唯一のSecurity Groupです。
~$export CLUSTER_SG_ID=$(aws eks describe-cluster --name $EKS_CLUSTER_NAME --region $AWS_REGION --query "cluster.resourcesVpcConfig.clusterSecurityGroupId" --output text)
~$echo $CLUSTER_SG_ID
sg-xxxxbbda9848bxxxx
次に、ワーカーノードに設定されている追加のSecurity Groupsがあるか確認します:
~$aws ec2 describe-instances \
--filters "Name=tag:Name,Values=eks-workshop-default-Node" --query 'Reservations[*].Instances[*].[InstanceId,SecurityGroups[*].GroupId]' \
--output table
--------------------------
| DescribeInstances |
+------------------------+
| i-xxxx2e04aa2baxxxx |
| sg-xxxxbbda9848bxxxx |
| i-xxxx45e34d609xxxx |
| sg-xxxxbbda9848bxxxx |
| i-xxxxdc536ec33xxxx |
| sg-xxxxbbda9848bxxxx |
+------------------------+
ワーカーノードはsg-xxxxbbda9848bxxxxというクラスターSecurity Groupのみを使用していることがわかります。
ステップ2 - ワーカーノードのSecurity Groupルールを確認する
ワーカーノードのSecurity Groupルールを調べてみましょう:
~$aws ec2 describe-security-group-rules \
--filters Name=group-id,Values=$CLUSTER_SG_ID \
--query 'SecurityGroupRules[*].{IsEgressRule:IsEgress,Protocol:IpProtocol,FromPort:FromPort,ToPort:ToPort,CidrIpv4:CidrIpv4,SourceSG:ReferencedGroupInfo.GroupId}' \
--output table
--------------------------------------------------------------------------------------------
| DescribeSecurityGroupRules |
+--------------+-----------+---------------+-----------+------------------------+----------+
| CidrIpv4 | FromPort | IsEgressRule | Protocol | SourceSG | ToPort |
+--------------+-----------+---------------+-----------+------------------------+----------+
| None | -1 | False | -1 | sg-085fea48222262c24 | -1 |
| 10.52.0.0/16| 443 | False | tcp | None | 443 |
| 10.53.0.0/16| 443 | False | tcp | None | 443 |
| 0.0.0.0/0 | -1 | True | -1 | None | -1 |
| None | -1 | False | -1 | sg-094406793b2c02fb3 | -1 |
| None | -1 | True | -1 | sg-085fea48222262c24 | -1 |
+--------------+-----------+---------------+-----------+------------------------+----------+
備考
4つのIngressルールと2つのEgressルールが存在し、以下の詳細があります:
- すべてのIPアドレス(0.0.0.0/0)へのすべてのプロトコルとポートのEgress - IsEgressRuleの列の値がTrueであることに注目してください。
- Security Group(sg-085fea48222262c24)へのすべてのプロトコルとポートのEgress
- Security Group(sg-085fea48222262c24)からのすべてのプロトコルとポートのIngress
- CIDRブロック10.52.0.0/16からのTCPポート443へのIngress
- CIDRブロック10.53.0.0/16からのTCPポート443へのIngress
- Security Group(sg-094406793b2c02fb3)からのすべてのプロトコルとポートのIngress
注目すべき点として、DNSトラフィック(UDP/TCPポート53)を許可するルールが存在せず、これがDNS解決の失敗の原因です。