# Creating endpoints for clients that don't support SNI
Long term solution for Cloudera-Boomi issue [LD-6324](https://trainingrocket.atlassian.net/browse/LD-6324)
## Option A: The current solution that works using Service level Classical ELB
Create a Kubernetes _Service_ level ELB using `type: LoadBalancer` and then manually create a CNAME record in Route53 to map `something.trainingrocket.com` to `elb-url.us-west-2.elb.amazonaws.com`. The following is all yaml we need for this solution to work.
```yaml
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:770069256085:certificate/c1b918de-8242-402e-9d81-6029047c2e4c
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
labels:
app: learndot
release: cloudera
name: cloudera-proxy-svc
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
name: http
protocol: TCP
- port: 443
targetPort: 8080
name: https
protocol: TCP
selector:
app: learndot
release: cloudera
```
Note that we're using `*.trainingrocket.com` as going to nginx ingress controller and cert manager would require us to create dedicated Kubernetes _Ingress_ level ELB.
- Requires _Service_ level ELB
- We need dedicated ACM cert, we can't use Let's Encrypt
- Requires manual CNAME record update everytime ELB changes, can cook up some bash script to automated it tho
- Additonal ELB cost
- Terminates SSL at ELB level
## Option B: Potential solution using Ingress level ALB
- We'll need to install and maintain additional Kubernetes _Operator_ [AWS ALB Ingress Controller](https://github.com/kubernetes-sigs/aws-alb-ingress-controller)
- Still needs dedicated SSL cert
> Although the AWS Application Load Balancer (ALB) is a modern load balancer offered by AWS that can can be provisioned from within EKS, at the time of writing, the alb-ingress-controller; is only capable of serving sites using certificates stored in AWS Certificate Manager (ACM). [source](https://docs.cert-manager.io/en/latest/tutorials/venafi/securing-ingress.html)
- Still needs manual CNAME record updates (according to [the only cert-manager docs on ALB](https://docs.cert-manager.io/en/latest/tutorials/venafi/securing-ingress.html))
- Still has additional cost of ALB
```yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
app: learndot
release: cloudera
name: cloudera-proxy-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:770069256085:certificate/c1b918de-8242-402e-9d81-6029047c2e4c
spec:
tls:
- hosts:
- "cloudera-proxy.trainingrocket.com"
secretName: ca-star-trainingrocket-com-key-pair
rules:
- host: "cloudera-proxy.trainingrocket.com"
http:
paths:
- path: /
backend:
serviceName: cloudera-proxy-svc
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
labels:
app: learndot
release: cloudera
name: cloudera-proxy-svc
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
name: http
protocol: TCP
selector:
app: learndot
release: cloudera
```
## Option C: Potential solution using Ingress level classical ELB
- I couldn't figure out how to do it
## How we could have done it in GCP
Create a reserved static IP named `cloudera-proxy-static-ip`
```ssh
$ gcloud compute addresses create cloudera-proxy-static-ip --global
$ gcloud compute addresses describe cloudera-proxy-static-ip --global --format 'value(address)'
35.186.228.205
```
Attach the static IP to _Ingress_ by just adding one line annotation `kubernetes.io/ingress.global-static-ip-name`. _Service_ just needs the usual`type: NodePort`. Then we create an _A_ Record pointing to reserved static IP from `something.ent.learndot.com`.
```yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
app: learndot
release: cloudera
name: cloudera-proxy-ingress
annotations:
certmanager.k8s.io/cluster-issuer: ca-issuer-ent-learndot-com
kubernetes.io/ingress.global-static-ip-name: cloudera-proxy-static-ip
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
tls:
- hosts:
- "cloudera-proxy.ent.learndot.com"
secretName: ent-default-ssl-certificate
rules:
- http:
paths:
- path: /
backend:
serviceName: cloudera-svc
servicePort: 80
```
- No load balancers are involved
- We can still use Let's Encrypt certs via cert-manager, we don't need dedicated certs
- No additional cost, in-use static IPs are free
- No need to create additional service, note that we're using `cloudera-svc`