Advanced Networking on EKS
Multi-cluster Networking
VPC Peering
# Create VPC peering connection
aws ec2 create-vpc-peering-connection \
--vpc-id vpc-12345678 \
--peer-vpc-id vpc-87654321
# Accept peering connection
aws ec2 accept-vpc-peering-connection \
--vpc-peering-connection-id pcx-12345678
# Update route tables
aws ec2 describe-route-tables
CoreDNS Configuration for Cross-cluster DNS
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
forward . 10.0.0.2 # On-premises DNS
prometheus :9153
cache 30
loop
reload
loadbalance
}
cluster2.local:53 {
forward . 10.1.0.2 # Cluster 2's CoreDNS
}
Global Accelerator for Multi-region
apiVersion: v1
kind: Service
metadata:
name: my-app
annotations:
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-globally-accessible: "true"
Network Policies with Calico
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: frontend-to-backend
spec:
podSelector:
matchLabels:
tier: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
tier: frontend
ports:
- protocol: TCP
port: 8080
External Traffic Policies
Local External Traffic Policy
apiVersion: v1
kind: Service
metadata:
name: my-app
spec:
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
externalTrafficPolicy: Local
healthCheckNodePort: 30778
Load Balancer Attributes
apiVersion: v1
kind: Service
metadata:
name: my-app
annotations:
service.beta.kubernetes.io/aws-load-balancer-attributes: |
idle_timeout_timeout_seconds=3600
cross_zone_load_balancing_enabled=true
service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: |
Environment=production,Team=platform
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
NLB with TLS
apiVersion: v1
kind: Service
metadata:
name: my-app-tls
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:123456789:certificate/xxxxx
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- port: 443
targetPort: 8080
References