How to run Kubectl command from Bastion Host on Private EKS clsuter - kubectl

I have setup a EKS Cluster on in a VPC (VPC-1) with 2 private subnets and no public internet access. I have created another VPC (VPC-2) with a public subnet and launched a Bastion host in this VPC. Created VPC peering between VPC-1 and VPC-2. I have ssh'ed into the Bastion host and tried to connect to the Private EKS cluster and was unsuccessful. What could be missing here? I want to run kubectl commands on this cluster.
When I try to connect to the run kubbectl,
kubectl get pods
I see the below.
Unable to connect to the server: dial tcp 10.0.1.125:443: i/o timeout
Since the VPC's are peered, the private subnets IP's should be advertised on the other VPC right?

Related

Access control plane from another ec2 instance

I am trying to access the kubectl of the master node that is running on an ec2 instance. I want to do this from another ec2 instance running on a different vpc. What steps should I take to make this possible?
I have the kubeconfig file on my second machine already but on running kubectl, it gives me a connection error,
Edit: Both the vpcs are private and have the similar CIDR.
If both of your EC2 are in diff VPCs you can do the VPC peering.
If you want to expose your master and K8s setup you can directly use the public IP(if exist) of EC2 and kubectl will connect to k8s cluster over the internet.
You can also checkout peering multiple VPC with same cidr range if you are looking for that way : Multiple VPC and Subnet with same CIDR blocks
Or : https://docs.aws.amazon.com/vpc/latest/peering/peering-configurations-partial-access.html#two-vpcs-peered-specific-cidr
If your eks api server is private, create peering between the
VPCs and allow your Second EC2 server's private IP
If your eks api server is public, you can allow your Second EC2 instance's public IP from the aws console, in the eks security or network section

kubectl from ec2 to my EKS cluster fails because of i/o timeout

I have a EKS cluster and I want to work with kubectl from my bastion ec2 (both are in same VPC).
Belows are current settings for both of them.
EKS
networking => Public and private
and have some public access source allowlist
Bastion
public subnet (also I tried another bastion server with private subnet.)
with elastic IP
I tried kubectl get nodes from bastion but always fails because of i/o timeout.
Is there any way to work with my bastion server?

AWS ECS docker container RDS integration

I have two VPC's in the same account. VPC-A(has RDS installed), VPC-B has services installed through ECS EC2 deployment.
VPC-B has multiple subnets. Services deployed through ECS EC2 service couldn't integrate with RDS. It keeps getting the following error message("Is the server running on host "....")
Where as telnet on RDS database port from Ec2instance(E1) inc VPC-B subnet can connect to the database.
But, it couldn't start the server if the same services are installed through ECS. When manually trying to start the container it works(able to connect to the database).
I also set up a Peering connection between two VPC's but the connection problem exists only when the container is started through ECS EC2 deployment.
The dropdown for public IP has "Disabled" and no other options. Subnet's are public subnets.
Any help/thoughts will be highly helpful.
As per aws docs "awsvpc" launches in a private IP and to interact with external services nat gateway needs to be attached to subnet.
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html#task-networking-considerations
The awsvpc network mode does not provide task ENIs with public IP addresses for tasks that use the EC2 launch type. To access the internet, tasks that use the EC2 launch type should be launched in a private subnet that is configured to use a NAT gateway.
"Auto assign public IP" mode is "Enabled" with "bridge" netowrking mode on on ECS EC2 launch.

Unable to connect (SSH) to instance with elastic ip

I'm having issues connecting to the (only) EC2 instance in my VPC. The VPC was has public and private subnets, a nat-gateway, an internet-gateway and a bunch of security groups.
After trying nearly everything I'm at the stage of adding an Elastic IP that points to my EC2 instance without any luck of getting in. I've added SSH (port 22) 0.0.0.0/0 to ALL my security groups, just to try to connect, but nothing is working.
The command I'm trying to ssh with is this
ssh -i "path-to-my-key.pem" ec2-user#<public-dns>.eu-west-3.compute.amazonaws.com
and the result is ssh: connect to host <public-dns>.eu-west-3.compute.amazonaws.com port 22: Operation timed out
VPC DNS Hostnames is set to true
VPC DNS Resolution is set to true
Instance has Public DNS (IPv4), the one i'm trying to connect to

vpc peering issues between bastion and app server ec2

I have two existing vpc's. One is shared services, and the other is the actual application servers. I have created a peer between the two vpc's, and added routes on each vpc, but still cannot ssh from bastian to app server from the shared services vpc.
Details:
shared services vpc cidr(172.31.0.0/16)
bastian server ip (172.31.5.84)
route added to main route table (10.2.0.0/16 -> vpc-peer-id)
app server vpc cidr (10.2.0.0/16)
ec2 subnet instance ip (10.2.60.4)
route added to main route table (172.17.0.0/16 -> vpc-peer-id)
added sg allow (22 tcp 172.31.0.0/16)
I also added the same route to the app server subnet but no change.
I am completely stumped atm for how to set this up or even work our where it is blocking. Any help would be appreciated.
To assist you, I did the following:
Started with an existing VPC-A with CIDR of 172.31.0.0/16
Created a new VPC-B with CIDR of 10.0.0.0/16
Created a subnet in VPC-B with CIDR of 10.0.0.0/24
Launched an Amazon Linux EC2 instance in the new subnet in VPC-B
Inbound Security Group: Allow SSH from 172.31.0.0/16
Created Peering connection:
Requester VPC: VPC-A
Acceptor VPC: VPC-B
Accepted peering connection (Did you do this on yours?)
Configured Route Tables:
The public Route Table in VPC-A: Route 10.0.0.0/16 to VPC-B
The private Route Table in VPC-B: Route 172.31.0.0/16 to VPC-A
Opened an SSH connection to an existing instance in VPC-A
From that instance, opened an SSH connection to the private IP address of the new instance (10.0.0.121)
Result: Instantly got a Permission denied (publickey) error because I didn't supply the private key. Getting an instant error messaged proved network connectivity (as opposed to hanging, which normally indicates a lack of network connectivity).
I then supplied the correct private key and tried to SSH again.
Result: Connected!
The complete flow is:
My laptop -> Instance in public subnet of `VPC-A` -> Instance in `VPC-B`
This had to use the peering connection because VPC-B has no Internet Gateway and I connected via the private IP address of the instance.
So, I recommend that you double-check that you have done each of the above steps to find where your configuration might differ (accepting the peering connection, configuring the security group, etc).