• Service Entry
    • ServiceEntry
    • ServiceEntry.Endpoint
    • ServiceEntry.Location
    • ServiceEntry.Resolution

    Service Entry

    ServiceEntry enables adding additional entries into Istio’s internalservice registry, so that auto-discovered services in the mesh canaccess/route to these manually specified services. A service entrydescribes the properties of a service (DNS name, VIPs, ports, protocols,endpoints). These services could be external to the mesh (e.g., webAPIs) or mesh-internal services that are not part of the platform’sservice registry (e.g., a set of VMs talking to services in Kubernetes).

    The following example declares a few external APIs accessed by internalapplications over HTTPS. The sidecar inspects the SNI value in theClientHello message to route to the appropriate external service.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-svc-https
    5. spec:
    6. hosts:
    7. - api.dropboxapi.com
    8. - www.googleapis.com
    9. - api.facebook.com
    10. location: MESH_EXTERNAL
    11. ports:
    12. - number: 443
    13. name: https
    14. protocol: TLS
    15. resolution: DNS

    The following configuration adds a set of MongoDB instances running onunmanaged VMs to Istio’s registry, so that these services can be treatedas any other service in the mesh. The associated DestinationRule is usedto initiate mTLS connections to the database instances.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-svc-mongocluster
    5. spec:
    6. hosts:
    7. - mymongodb.somedomain # not used
    8. addresses:
    9. - 192.192.192.192/24 # VIPs
    10. ports:
    11. - number: 27018
    12. name: mongodb
    13. protocol: MONGO
    14. location: MESH_INTERNAL
    15. resolution: STATIC
    16. endpoints:
    17. - address: 2.2.2.2
    18. - address: 3.3.3.3

    and the associated DestinationRule

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: DestinationRule
    3. metadata:
    4. name: mtls-mongocluster
    5. spec:
    6. host: mymongodb.somedomain
    7. trafficPolicy:
    8. tls:
    9. mode: MUTUAL
    10. clientCertificate: /etc/certs/myclientcert.pem
    11. privateKey: /etc/certs/client_private_key.pem
    12. caCertificates: /etc/certs/rootcacerts.pem

    The following example uses a combination of service entry and TLSrouting in a virtual service to steer traffic based on the SNI value toan internal egress firewall.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-svc-redirect
    5. spec:
    6. hosts:
    7. - wikipedia.org
    8. - "*.wikipedia.org"
    9. location: MESH_EXTERNAL
    10. ports:
    11. - number: 443
    12. name: https
    13. protocol: TLS
    14. resolution: NONE

    And the associated VirtualService to route based on the SNI value.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: VirtualService
    3. metadata:
    4. name: tls-routing
    5. spec:
    6. hosts:
    7. - wikipedia.org
    8. - "*.wikipedia.org"
    9. tls:
    10. - match:
    11. - sniHosts:
    12. - wikipedia.org
    13. - "*.wikipedia.org"
    14. route:
    15. - destination:
    16. host: internal-egress-firewall.ns1.svc.cluster.local

    The virtual service with TLS match serves to override the default SNImatch. In the absence of a virtual service, traffic will be forwarded tothe wikipedia domains.

    The following example demonstrates the use of a dedicated egress gatewaythrough which all external service traffic is forwarded.The ‘exportTo’ field allows for control over the visibility of a servicedeclaration to other namespaces in the mesh. By default, a service is exportedto all namespaces. The following example restricts the visibility to thecurrent namespace, represented by “.”, so that it cannot be used by othernamespaces.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-svc-httpbin
    5. namespace : egress
    6. spec:
    7. hosts:
    8. - httpbin.com
    9. exportTo:
    10. - "."
    11. location: MESH_EXTERNAL
    12. ports:
    13. - number: 80
    14. name: http
    15. protocol: HTTP
    16. resolution: DNS

    Define a gateway to handle all egress traffic.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: Gateway
    3. metadata:
    4. name: istio-egressgateway
    5. namespace: istio-system
    6. spec:
    7. selector:
    8. istio: egressgateway
    9. servers:
    10. - port:
    11. number: 80
    12. name: http
    13. protocol: HTTP
    14. hosts:
    15. - "*"

    And the associated VirtualService to route from the sidecar to thegateway service (istio-egressgateway.istio-system.svc.cluster.local), aswell as route from the gateway to the external service. Note that thevirtual service is exported to all namespaces enabling them to route trafficthrough the gateway to the external service. Forcing traffic to go througha managed middle proxy like this is a common practice.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: VirtualService
    3. metadata:
    4. name: gateway-routing
    5. namespace: egress
    6. spec:
    7. hosts:
    8. - httpbin.com
    9. exportTo:
    10. - "*"
    11. gateways:
    12. - mesh
    13. - istio-egressgateway
    14. http:
    15. - match:
    16. - port: 80
    17. gateways:
    18. - mesh
    19. route:
    20. - destination:
    21. host: istio-egressgateway.istio-system.svc.cluster.local
    22. - match:
    23. - port: 80
    24. gateways:
    25. - istio-egressgateway
    26. route:
    27. - destination:
    28. host: httpbin.com

    The following example demonstrates the use of wildcards in the hosts forexternal services. If the connection has to be routed to the IP addressrequested by the application (i.e. application resolves DNS and attemptsto connect to a specific IP), the discovery mode must be set to NONE.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-svc-wildcard-example
    5. spec:
    6. hosts:
    7. - "*.bar.com"
    8. location: MESH_EXTERNAL
    9. ports:
    10. - number: 80
    11. name: http
    12. protocol: HTTP
    13. resolution: NONE

    The following example demonstrates a service that is available via aUnix Domain Socket on the host of the client. The resolution must beset to STATIC to use Unix address endpoints.

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: unix-domain-socket-example
    5. spec:
    6. hosts:
    7. - "example.unix.local"
    8. location: MESH_EXTERNAL
    9. ports:
    10. - number: 80
    11. name: http
    12. protocol: HTTP
    13. resolution: STATIC
    14. endpoints:
    15. - address: unix:///var/run/example/socket

    For HTTP-based services, it is possible to create a VirtualServicebacked by multiple DNS addressable endpoints. In such a scenario, theapplication can use the HTTP_PROXY environment variable to transparentlyreroute API calls for the VirtualService to a chosen backend. Forexample, the following configuration creates a non-existent externalservice called foo.bar.com backed by three domains: us.foo.bar.com:8080,uk.foo.bar.com:9080, and in.foo.bar.com:7080

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: external-svc-dns
    5. spec:
    6. hosts:
    7. - foo.bar.com
    8. location: MESH_EXTERNAL
    9. ports:
    10. - number: 80
    11. name: http
    12. protocol: HTTP
    13. resolution: DNS
    14. endpoints:
    15. - address: us.foo.bar.com
    16. ports:
    17. https: 8080
    18. - address: uk.foo.bar.com
    19. ports:
    20. https: 9080
    21. - address: in.foo.bar.com
    22. ports:
    23. https: 7080

    With HTTP_PROXY=http://localhost/, calls from the application tohttp://foo.bar.com will be load balanced across the three domainsspecified above. In other words, a call to http://foo.bar.com/baz wouldbe translated to http://uk.foo.bar.com/baz.

    The following example illustrates the usage of a ServiceEntrycontaining a subject alternate namewhose format conforms to the SPIFFE standard:

    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: ServiceEntry
    3. metadata:
    4. name: httpbin
    5. namespace : httpbin-ns
    6. spec:
    7. hosts:
    8. - httpbin.com
    9. location: MESH_INTERNAL
    10. ports:
    11. - number: 80
    12. name: http
    13. protocol: HTTP
    14. resolution: STATIC
    15. endpoints:
    16. - address: 2.2.2.2
    17. - address: 3.3.3.3
    18. subjectAltNames:
    19. - "spiffe://cluster.local/ns/httpbin-ns/sa/httpbin-service-account"

    ServiceEntry

    ServiceEntry enables adding additional entries into Istio’s internalservice registry.

    FieldTypeDescriptionRequired
    hostsstring[]The hosts associated with the ServiceEntry. Could be a DNSname with wildcard prefix.- The hosts field is used to select matching hosts in VirtualServices and DestinationRules.- For HTTP traffic the HTTP Host/Authority header will be matched against the hosts field.- For HTTPs or TLS traffic containing Server Name Indication (SNI), the SNI valuewill be matched against the hosts field.Note that when resolution is set to type DNSand no endpoints are specified, the host field will be used as the DNS nameof the endpoint to route traffic to.Yes
    addressesstring[]The virtual IP addresses associated with the service. Could be CIDRprefix. For HTTP traffic, generated route configurations will include http routedomains for both the addresses and hosts field values and the destination willbe identified based on the HTTP Host/Authority header.If one or more IP addresses are specified,the incoming traffic will be identified as belonging to this serviceif the destination IP matches the IP/CIDRs specified in the addressesfield. If the Addresses field is empty, traffic will be identifiedsolely based on the destination port. In such scenarios, the port onwhich the service is being accessed must not be shared by any otherservice in the mesh. In other words, the sidecar will behave as asimple TCP proxy, forwarding incoming traffic on a specified port tothe specified destination endpoint IP/host. Unix domain socketaddresses are not supported in this field.No
    portsPort[]The ports associated with the external service. If theEndpoints are Unix domain socket addresses, there must be exactly oneport.Yes
    locationLocationSpecify whether the service should be considered external to the meshor part of the mesh.No
    resolutionResolutionService discovery mode for the hosts. Care must be takenwhen setting the resolution mode to NONE for a TCP port withoutaccompanying IP addresses. In such cases, traffic to any IP onsaid port will be allowed (i.e. 0.0.0.0:).Yes
    endpointsEndpoint[]One or more endpoints associated with the service.No
    exportTostring[]A list of namespaces to which this service is exported. Exporting a serviceallows it to be used by sidecars, gateways and virtual services defined inother namespaces. This feature provides a mechanism for service ownersand mesh administrators to control the visibility of services acrossnamespace boundaries.If no namespaces are specified then the service is exported to allnamespaces by default.The value “.” is reserved and defines an export to the same namespace thatthe service is declared in. Similarly the value “” is reserved anddefines an export to all namespaces.For a Kubernetes Service, the equivalent effect can be achieved by settingthe annotation “networking.istio.io/exportTo” to a comma-separated listof namespace names.NOTE: in the current release, the exportTo value is restricted to“.” or “” (i.e., the current namespace or all namespaces).No
    subjectAltNamesstring[]The list of subject alternate names allowed for workload instances thatimplement this service. This information is used to enforcesecure-naming.If specified, the proxy will verify that the servercertificate’s subject alternate name matches one of the specified values.No

    ServiceEntry.Endpoint

    Endpoint defines a network address (IP or hostname) associated withthe mesh service.

    FieldTypeDescriptionRequired
    addressstringAddress associated with the network endpoint without theport. Domain names can be used if and only if the resolution is setto DNS, and must be fully-qualified without wildcards. Use the formunix:///absolute/path/to/socket for Unix domain socket endpoints.Yes
    portsmap<string, uint32>Set of ports associated with the endpoint. The ports must beassociated with a port name that was declared as part of theservice. Do not use for unix:// addresses.No
    labelsmap<string, string>One or more labels associated with the endpoint.No
    networkstringNetwork enables Istio to group endpoints resident in the same L3domain/network. All endpoints in the same network are assumed to bedirectly reachable from one another. When endpoints in differentnetworks cannot reach each other directly, an Istio Gateway can beused to establish connectivity (usually using theAUTO_PASSTHROUGH mode in a Gateway Server). This isan advanced configuration used typically for spanning an Istio meshover multiple clusters.No
    localitystringThe locality associated with the endpoint. A locality correspondsto a failure domain (e.g., country/region/zone). Arbitrary failuredomain hierarchies can be represented by separating eachencapsulating failure domain by /. For example, the locality of anan endpoint in US, in US-East-1 region, within availability zoneaz-1, in data center rack r11 can be represented asus/us-east-1/az-1/r11. Istio will configure the sidecar to route toendpoints within the same locality as the sidecar. If none of theendpoints in the locality are available, endpoints parent locality(but within the same network ID) will be chosen. For example, ifthere are two endpoints in same network (networkID “n1”), say e1with locality us/us-east-1/az-1/r11 and e2 with localityus/us-east-1/az-2/r12, a sidecar from us/us-east-1/az-1/r11 localitywill prefer e1 from the same locality over e2 from a differentlocality. Endpoint e2 could be the IP associated with a gateway(that bridges networks n1 and n2), or the IP associated with astandard service endpoint.No
    weightuint32The load balancing weight associated with the endpoint. Endpointswith higher weights will receive proportionally higher traffic.No

    ServiceEntry.Location

    Location specifies whether the service is part of Istio mesh oroutside the mesh. Location determines the behavior of severalfeatures, such as service-to-service mTLS authentication, policyenforcement, etc. When communicating with services outside the mesh,Istio’s mTLS authentication is disabled, and policy enforcement isperformed on the client-side as opposed to server-side.

    NameDescription
    MESH_EXTERNALSignifies that the service is external to the mesh. Typically usedto indicate external services consumed through APIs.
    MESH_INTERNALSignifies that the service is part of the mesh. Typically used toindicate services added explicitly as part of expanding the servicemesh to include unmanaged infrastructure (e.g., VMs added to aKubernetes based service mesh).

    ServiceEntry.Resolution

    Resolution determines how the proxy will resolve the IP addresses ofthe network endpoints associated with the service, so that it canroute to one of them. The resolution mode specified here has no impacton how the application resolves the IP address associated with theservice. The application may still have to use DNS to resolve theservice to an IP so that the outbound traffic can be captured by theProxy. Alternatively, for HTTP services, the application coulddirectly communicate with the proxy (e.g., by setting HTTP_PROXY) totalk to these services.

    NameDescription
    NONEAssume that incoming connections have already been resolved (to aspecific destination IP address). Such connections are typicallyrouted via the proxy using mechanisms such as IP table REDIRECT/eBPF. After performing any routing related transformations, theproxy will forward the connection to the IP address to which theconnection was bound.
    STATICUse the static IP addresses specified in endpoints (see below) as thebacking instances associated with the service.
    DNSAttempt to resolve the IP address by querying the ambient DNS,during request processing. If no endpoints are specified, the proxywill resolve the DNS address specified in the hosts field, ifwildcards are not used. If endpoints are specified, the DNSaddresses specified in the endpoints will be resolved to determinethe destination IP address. DNS resolution cannot be used with Unixdomain socket endpoints.