Skip to content
This repository has been archived by the owner on Jun 14, 2018. It is now read-only.

Ingress controller: TLS support #216

Closed
zcahana opened this issue Feb 27, 2017 · 16 comments
Closed

Ingress controller: TLS support #216

zcahana opened this issue Feb 27, 2017 · 16 comments

Comments

@zcahana
Copy link
Member

zcahana commented Feb 27, 2017

Ingress resource specification allows to secure an ingress by specifying TLS configuration which is used for TLS termination.

This probably needs to be resolved as part of the larger story of TLS support within the Istio proxy (see #52).

@zcahana zcahana changed the title Ingres controller: TLS support Ingress controller: TLS support Feb 27, 2017
@kyessenov kyessenov added this to the manager alpha milestone Mar 14, 2017
@kyessenov
Copy link
Contributor

Istio Auth alpha design omits ingress entirely. We should do an ad-hoc solution using secrets/configmaps following kubernetes practices and revisit this once the in-cluster auth is past alpha.

@rshriram
Copy link
Member

rshriram commented Mar 14, 2017 via email

@ijsnellf
Copy link
Contributor

#352 provides basic TLS support for ingress.

@ijsnellf
Copy link
Contributor

Does anything else need to be done for this issue for alpha?

@zcahana
Copy link
Member Author

zcahana commented Apr 2, 2017

I don't know about alpha vs. future prioritization, but I think we should at least support reading TLS secret name from ingress resource, as specified here. That should probably be satisfactory TLS support to start with.

@zcahana
Copy link
Member Author

zcahana commented Apr 4, 2017

The main obstacle for implementing this is that it's still unclear how to represent the ingress TLS configuration in the model.

One option that @Kuat raised in #151 was to create a different model object for ingress (e.g., IngressRule) and use that instead of RouteRule.

Another option is to extend the model with some more specific object (e.g. a TLSContext associating a port/vhost to a secret) and also extend the RouteRule.Match so that we can indicate that a RouteRule (derived from an ingress) is for HTTPS traffic.

Thoughts?

@rshriram
Copy link
Member

rshriram commented Apr 4, 2017 via email

@zcahana
Copy link
Member Author

zcahana commented Apr 4, 2017

@rshriram are you referring to the TLS secret name passed with a flag to the manager?

@rshriram
Copy link
Member

rshriram commented Apr 4, 2017 via email

@kyessenov
Copy link
Contributor

I was thinking how ingress differs from the regular route rule. If you think of ingress proxy as a special service, then the main difference is that the destination weight field refers to a different service than the ingress. E.g.

destination: ingress-service
match:
  httpHeaders:
    uri:
      prefix: /a
route:
- destination: a.default.svc.cluster.local

This poses two questions:

  • do we apply route rules towards the destination service, that is do we unroll the target destination into a bunch of route rules? if we allow any route rule to refer to a distinct destination in the route than its destination, then how do we prevent multiple unrolls, e.g. if "a.default" is actually routing to "b.default", do we also apply rules of "b.default"?
  • should TLS context be a property of the route? I think @rshriram is proposing to use "authority" header to uniquely identify the TLS certs but then nothing in our model prevents from using multiple route rules that use the same "authority".

@rshriram
Copy link
Member

rshriram commented Apr 26, 2017 via email

@kyessenov
Copy link
Contributor

kyessenov commented Apr 26, 2017

  • I'm not so sure whether we want to allow external service names as destinations. Destination after all is inside the cluster. One idea could be to mark a route rule as "external" and that will expose the rule outside the cluster. The ingress service will be an implementation detail. In the example above:
destination: a.default.svc.cluster.local
external: true
match:
  httpHeaders:
    authority: 
      exact: my.domain.com
    uri:
      prefix: /a

Using authority as a destination has some drawbacks: how do we handle the wildcards (*.my.domain.com)? I find it confusing to have two destinations "my.domain.com" and "a.default.svc.cluster.local" for the same route...

  • TLS is a property of route as defined by Ingress spec. You can have TLS and non-TLS paths for the same domain which is a reasonable use case.

@rshriram rshriram modified the milestones: manager beta, manager alpha May 9, 2017
@rshriram
Copy link
Member

support exists as of istio 0.1.6

@kyessenov kyessenov reopened this Aug 17, 2017
@kyessenov
Copy link
Contributor

TLS is rather half-baked. No SNI and poor security with secret transfer. Leave it open until it's beta-quality.

@rshriram
Copy link
Member

rshriram commented Sep 8, 2017

Just SNI left. Secret transfer sorted out.

@kyessenov kyessenov modified the milestones: Istio 0.2, Istio 0.3 Sep 27, 2017
@rshriram
Copy link
Member

#484 is tracking SNI support..

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants