With Istio 1.0.x, Istio uses a component called Citadel to provision certificates to workloads and use an identity to encode into these certificates. The identity Istio uses on Kubernetes, for example, is based on Kubernetes service accounts. These certificates can then be used in the Istio service proxies (based on Envoy Proxy) to transparently establish mutual authentication/mTLS with any services with which it communicates.
With Istio 1.1 the certificates are issued differently to solve for some drawbacks of the 1.0.x approach. Istio 1.1 uses Envoy’s Secret Discovery Service API (SDS) which means we can avoid hot-restarting the proxy when new certificates are issues (or rotated), we can eliminate the distribution of private keys over the network, and we can avoid any of the risks of using Kubernetes secrets.
Gloo with Istio 1.0.x and mTLS
Integrating Gloo into Istio service mesh with mTLS enabled is simple as:
Mount the correct Istio service mesh certificates into the Gloo Proxy (based on Envoy)
Configure the Gloo Upstreams to use the Istio certificates for mTLS
As aforementioned, Istio’s 1.1 mTLS configuration has changed and you can optionally use a more-secure SDS implementation. With Gloo, we can do that by:
Enabling the Unix Domain Socket in our Gloo Gateway (Envoy) to talk directly with the Istio SDS implementation (node agent)
Update the Gloo Upstream to use the new SDS configuration