31
Kubernetes Ingress for AWS Cost Saving TrendMicro Consumer WSE AWSE Eric C Huang 2017/10/25

Kubernetes Ingress for AWS Cost Saving

Embed Size (px)

Citation preview

Page 1: Kubernetes Ingress for AWS Cost Saving

Kubernetes Ingress for AWS Cost SavingTrendMicro Consumer WSE AWSEEric C Huang2017/10/25

Page 2: Kubernetes Ingress for AWS Cost Saving

goo.gl/VrjuSp

Page 3: Kubernetes Ingress for AWS Cost Saving

AWS Elastic Load Balancer Is Too

EXPEN$IVE

70% cheaper Kubernetes cluster on AWS

Page 4: Kubernetes Ingress for AWS Cost Saving

Service Types

● ClusterIP (Default Type)● NodePort● LoadBalancer

Page 5: Kubernetes Ingress for AWS Cost Saving

ClusterIP

Page 6: Kubernetes Ingress for AWS Cost Saving

Define a ClusterIP Service

Page 7: Kubernetes Ingress for AWS Cost Saving

ClusterIP

● port● targetPort

Page 8: Kubernetes Ingress for AWS Cost Saving

Create a ClusterIP Service via kubectl

● kubectl run echo-server-dev \--image=gcr.io/google_containers/echoserver:1.4 \--port=8080 \--replicas=2 \--namespace=awse

● kubectl expose deployment echo-server-dev-service \--port=80 \--target-port=8080 \--namespace=awse

Page 9: Kubernetes Ingress for AWS Cost Saving

Verify a Service

● kubectl get services echo-server-dev --namespace=awse -o yaml

● kubectl get deployments echo-server-dev --namespace=awse -o yaml

● kubectl get endpoints echo-server-dev --namespace=awse -o yaml

Page 10: Kubernetes Ingress for AWS Cost Saving

How to Connect a ClusterIP Service?

● kubectl run nettools \--image=jonlangemak/net_tools \--namespace=default

● kubectl exec nettools-xxx -it bash● curl http://echo-server-dev.awse

○ [service-name].[namespace]

Page 11: Kubernetes Ingress for AWS Cost Saving

NodePort

Page 12: Kubernetes Ingress for AWS Cost Saving

NodePort

● port● nodePort● targetPort

Page 13: Kubernetes Ingress for AWS Cost Saving

How to Connect a NodePort Service?

● curl http://[node ip]:[node port]/

Page 14: Kubernetes Ingress for AWS Cost Saving

LoadBalancer

Page 15: Kubernetes Ingress for AWS Cost Saving

LoadBalancer

● port● nodePort● targetPort● CLB (provider: aws)

Page 16: Kubernetes Ingress for AWS Cost Saving

LoadBalancer

Page 17: Kubernetes Ingress for AWS Cost Saving

How to Connect a LoadBalancer Service?

● curl http://[CLB]/

Page 18: Kubernetes Ingress for AWS Cost Saving

LoadBalancer with TLS

● CLB○ HTTPS / TCP + SSL○ Certificate (from ACM)○ TLS Protocol + Cipher

● Route 53 A Alias -> CLB

Page 19: Kubernetes Ingress for AWS Cost Saving

How to Connect a LoadBalancer Service with TLS?

● curl https://[Route 53 A Alias]/

Page 20: Kubernetes Ingress for AWS Cost Saving

Ingress

Page 21: Kubernetes Ingress for AWS Cost Saving

Ingress

● An Ingress is a collection of rules that allow inbound connections to reach the cluster services.

● Ingress Types○ Simple Fanout○ Name Based Virtual Hosting○ TLS

Page 22: Kubernetes Ingress for AWS Cost Saving

Simple Fanout

Page 23: Kubernetes Ingress for AWS Cost Saving

Name Based Virtual Hosting

Page 24: Kubernetes Ingress for AWS Cost Saving

Different Ingress Controllers

● Ingress Controller○ Nginx: https://github.com/kubernetes/ingress-nginx○ Voyager (HAProxy): https://github.com/appscode/voyager/tree/3.2.2○ Træfik: https://docs.traefik.io/user-guide/kubernetes/○ ...etc

Page 25: Kubernetes Ingress for AWS Cost Saving

Nginx Ingress Controller

● Handle 404:○ nginx-default-backend deployment○ nginx-default-backend ClusterIP service

● Reverse Proxy:○ ingress-nginx deployment○ ingress-nginx LoadBalancer service

Page 26: Kubernetes Ingress for AWS Cost Saving

Ingress

Page 27: Kubernetes Ingress for AWS Cost Saving

Verify Ingress

● Simple Fanout○ curl -H “Host:foo.bar.com” http://ingress-nginx.kube-system/foo○ curl -H “Host:foo.bar.com” http://[node ip]:[nodeport]/bar○ curl -H “Host:foo.bar.com” http://[CLB]/foo

● Name Based Virtual Hosting○ curl -H “Host:foo.bar.com” http://ingress-nginx.kube-system○ curl -H “Host:bar.foo.com” http://[node ip]:[nodeport]○ curl -H “Host:foo.bar.com” http://[CLB]

Page 28: Kubernetes Ingress for AWS Cost Saving

TLS

● AWS CLB Annotations:○ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: “http”○ service.beta.kubernetes.io/aws-load-balancer-ssl-cert:

"arn:aws:acm:ap-northeast-1:xxx:certificate/xxxx"○ service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"○ service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"○ ( service.beta.kubernetes.io/aws-load-balancer-internal: “false” )○ ( service.beta.kubernetes.io/aws-load-balancer-extra-security-groups: “sg-xxx” )

● Route 53 A Alias -> AWS CLB

Page 29: Kubernetes Ingress for AWS Cost Saving

Ingress + CLB + TLS

Page 30: Kubernetes Ingress for AWS Cost Saving

Verify Name Based Virtual Hosting with TLS

● curl https://foo.bar.com● curl https://bar.foo.com

Page 31: Kubernetes Ingress for AWS Cost Saving

Q & A