Securing Nginx-Ingress > Istio-Ingress

11/15/2017

I have Istio Ingress which is working with traffic going in to microservices and inbetween microservices is being encrypted within ISTIO domain. But i dont want to expose ISTIO ingress to public.

So tried deploying NGINX or HAPROXY ingress (with https certs) and point them to ISTIO ingress and everything is working great.

My only worry now is that traffic between NGINX INGRESS (https term) > ISTIO INGRESS is not encrypted.

What is the usual way on Istio to get full encryption of traffic but with NGINX/HAPROXY ingress.

I guess one way is to HAPROXY tcp mode to ISTIO ingress with certs on Istio ingress. Haven't tried it but it should work. Wild idea is running NGINX ingress within ISTIO mash but then i would loose some Istio Ingress capabilities.

What is the recommended way or any suggestion. How is usualy Istio being exposed on some real Prod env example.

-- DenyBoy
istio
kubernetes

1 Answer

11/20/2017

Since i dont use cloud loadbalancer on voyager instances but expose Voyager/Haproxy on Host-Port

I collocated Voyager(HostPort) and Istio(HostPort) via DeamonSet/node-selector(and taints) on same machines called frontend. Then just pointed Voyager to loadbalance the loopback/localhost with port of Istio HostPort I specified.

 backendRule:
 - 'server local-istio localhost:30280'

This way no unenctypted traffic is traversing the network between Voyager/Haproxy and Istio Ingress since they communicate now on same Host. I have 2 frontend nodes witch are beeing loadbalanced so i have redundancy. But its kind of improvisation and breaking kubernetes logic. On the other hand it works great.

Other solution was to use selfsigned certificates on Istio, than just point Voyager/Haproxy to Istio instances. But this requires multiple terminations since Voyager is also terminating Https. Advanteg of this is that you can leave Voyager and Istio instances to Kubernetes to distribute. No need to bind them to specific machines.

-- DenyBoy
Source: StackOverflow