Episode 10 extends the mesh beyond Kubernetes: ServiceEntry with DNS, STATIC, and NONE resolution strategies, WorkloadEntry for individual endpoints, WorkloadGroup for auto-registration, and mesh expansion for connecting VMs.

So far our mesh contains Kubernetes services. But the real world is more complicated than that: there are external APIs, legacy databases, and virtual machines that are not ready to move to containers. Episode 10 covers how Istio discovers services outside Kubernetes and how to pull them into the mesh as members with ServiceEntry, WorkloadEntry, and WorkloadGroup.
NONE resolution makes Envoy forward traffic to the destination address without doing any discovery. It suits cases where the name already points to a fixed, certain address:
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: external-direct
spec:
hosts:
- ext.example.com
ports:
- number: 443
name: https
protocol: TLS
resolution: NONE
location: MESH_EXTERNALresolution: NONE makes Envoy skip DNS lookups — the name is forwarded directly as the connection destination. It is the simplest option, but you get no endpoint control from Istio.
With STATIC, the endpoint list is written directly in the ServiceEntry:
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: external-payment
spec:
hosts:
- api.payment.internal
addresses:
- 10.99.0.10
ports:
- number: 443
name: https
protocol: TLS
resolution: STATIC
endpoints:
- address: 192.168.50.21
- address: 192.168.50.22
location: MESH_EXTERNALendpoints provides two backend addresses that Envoy can use for load balancing and outlier detection. addresses is optional — a virtual IP used to select this ServiceEntry.
With DNS, Envoy queries DNS periodically:
spec:
hosts:
- api.payment.example.com
ports:
- number: 443
name: https
protocol: TLS
resolution: DNS
location: MESH_EXTERNALresolution: DNS is the most common choice: the name is resolved, the IP follows the DNS answer, and the TTL is managed by Envoy. Note that here Envoy does the resolving, not the application.
ServiceEntry connects the mesh to external services. For workloads (VMs, bare-metal) that want to become part of the mesh and be governed by its policies, use WorkloadEntry:
apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
name: vm-legacy-1
namespace: legacy
spec:
address: 10.0.3.15
labels:
app: legacy-app
version: v1
serviceAccount: legacy-sa
network: network-legacyaddress is the IP of the VM that will receive traffic. The labels field is special here: these labels become workload labels that can be used for subsets in a DestinationRule, exactly like Kubernetes Pod labels.
Defining WorkloadEntries one by one does not scale. WorkloadGroup lets VMs register themselves automatically:
apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
name: vm-pool
namespace: legacy
spec:
template:
serviceAccount: legacy-sa
network: network-legacy
metadata:
labels:
app: legacy-appA VM running the Istio agent creates its own WorkloadEntry from this template when it connects. Every new VM automatically joins the mesh without manual YAML edits.
Mesh expansion connects VMs to the control plane in a few major steps:
istioctl proxy-status.istioctl install --set values.global.meshID=mesh1
ssh vm-legacy "curl -fsSL https://istio.io/downloadIstio | sh -"
scp istio-1.22.1/tools/istioctl.bash vm-legacy:istioctl proxy on the VM connects to istiod and processes traffic with the same rules as a sidecar in the cluster. The main difference: because the VM has no Kubernetes, its identity comes from the ServiceAccount embedded during setup.
Info
For production, run VMs with separated workload identity and a clear network. The network field on WorkloadEntry and WorkloadGroup determines the network zone used for multi-network routing (episode 16).
Episode 10 expanded the reach of the mesh: ServiceEntry with three resolution strategies, WorkloadEntry for non-Kubernetes endpoints, WorkloadGroup for auto-registration, and the mesh expansion process for bringing VMs under the same traffic and security management.
Key takeaways:
addresses distinguishes ServiceEntry selection; endpoints are the real targets.network field matters for multi-network architectures.In the next episode, episode 11, we enter the security phase: security basics with mTLS, authentication, and authorization — PeerAuthentication for automatic mTLS, RequestAuthentication for JWT, and AuthorizationPolicy for identity-based access control.