Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kubernetes: Have no access from EKS pod to RDS Postgres

I'm trying to setup kubernetes on AWS. For this I created an EKS cluster with 3 nodes (t2.small) according to official AWS tutorial. Then I want to run a pod with some app which communicates with Postgres (RDS in different VPC).

But unfortunately the app doesn't connect to the database.

What I have:

  1. EKS cluster with its own VPC (CIDR: 192.168.0.0/16)
  2. RDS (Postgres) with its own VPC (CIDR: 172.30.0.0/16)
  3. Peering connection initiated from the RDS VPC to the EKS VPC
  4. Route table for 3 public subnets of EKS cluster is updated: route with destination 172.30.0.0/16 and target — peer connection from the step #3 is added.
  5. Route table for the RDS is updated: route with destination 192.168.0.0/16 and target — peer connection from the step #3 is added.
  6. The RDS security group is updated, new inbound rule is added: all traffic from 192.168.0.0/16 is allowed

After all these steps I execute kubectl command:

kubectl exec -it my-pod-app-6vkgm nslookup rds-vpc.unique_id.us-east-1.rds.amazonaws.com
nslookup: can't resolve '(null)': Name does not resolve

Name:      rds-vpc.unique_id.us-east-1.rds.amazonaws.com
Address 1: 52.0.109.113 ec2-52-0-109-113.compute-1.amazonaws.com

Then I connect to one of the 3 nodes and execute a command:

getent hosts rds-vpc.unique_id.us-east-1.rds.amazonaws.com
52.0.109.113    ec2-52-0-109-113.compute-1.amazonaws.com rds-vpc.unique_id.us-east-1.rds.amazonaws.com

What I missed in EKS setup in order to have access from pods to RDS?

UPDATE:

I tried to fix the problem by Service:

apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  type: ExternalName
  externalName: rds-vpc.unique_id.us-east-1.rds.amazonaws.com

So I created this service in EKS, and then tried to refer to postgres-service as DB URL instead of direct RDS host address.

This fix does not work :(

like image 367
Alex Fruzenshtein Avatar asked Dec 01 '18 14:12

Alex Fruzenshtein


People also ask

How many IP addresses does EKS use?

The subnets that you specify when you create a cluster must meet the following requirements: The subnets must each have at least six IP addresses for use by Amazon EKS. However, we recommend at least 16 IP addresses. The subnets can't reside in AWS Outposts, AWS Wavelength, or an AWS Local Zone.

How do I pair my EKS endpoint?

Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters . Choose the name of the cluster to display your cluster information. Choose the Networking tab and choose Update. For Private access, choose whether to enable or disable private access for your cluster's Kubernetes API server endpoint.


Video Answer


1 Answers

Have you tried to enable "dns propagation" in the peering connection? It looks like you are not getting the internally routable dns. You can enable it by going into the setting for the peering connection and checking the box for dns propagation. I generally do this will all of the peering connections that I control.

like image 84
donkeyx Avatar answered Sep 19 '22 17:09

donkeyx