Connecting a virtual machine to a service mesh
OKD Virtualization is now integrated with OpenShift Service Mesh. You can monitor, visualize, and control traffic between pods that run virtual machine workloads on the default pod network with IPv4.
Adding a virtual machine to a service mesh
To add a virtual machine (VM) workload to a service mesh, enable automatic sidecar injection in the VM configuration file by setting the sidecar.istio.io/inject
annotation to true
. Then expose your VM as a service to view your application in the mesh.
To avoid port conflicts, do not use ports used by the Istio sidecar proxy. These include ports 15000, 15001, 15006, 15008, 15020, 15021, and 15090. |
Prerequisites
You installed the Service Mesh Operators.
You created the Service Mesh control plane.
You added the VM project to the Service Mesh member roll.
Procedure
Edit the VM configuration file to add the
sidecar.istio.io/inject: "true"
annotation:Example configuration file
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
labels:
kubevirt.io/vm: vm-istio
name: vm-istio
spec:
runStrategy: Always
template:
metadata:
labels:
kubevirt.io/vm: vm-istio
app: vm-istio (1)
annotations:
sidecar.istio.io/inject: "true" (2)
spec:
domain:
devices:
interfaces:
- name: default
masquerade: {} (3)
disks:
- disk:
bus: virtio
name: containerdisk
- disk:
bus: virtio
name: cloudinitdisk
resources:
requests:
memory: 1024M
networks:
- name: default
pod: {}
terminationGracePeriodSeconds: 180
volumes:
- containerDisk:
image: registry:5000/kubevirt/fedora-cloud-container-disk-demo:devel
name: containerdisk
1 The key/value pair (label) that must be matched to the service selector attribute. 2 The annotation to enable automatic sidecar injection. 3 The binding method (masquerade mode) for use with the default pod network. Apply the VM configuration:
$ oc apply -f <vm_name>.yaml (1)
1 The name of the virtual machine YAML file. Create a
Service
object to expose your VM to the service mesh.apiVersion: v1
kind: Service
metadata:
name: vm-istio
spec:
selector:
app: vm-istio (1)
ports:
- port: 8080
name: http
protocol: TCP
1 The service selector that determines the set of pods targeted by a service. This attribute corresponds to the spec.metadata.labels
field in the VM configuration file. In the above example, theService
object namedvm-istio
targets TCP port 8080 on any pod with the labelapp=vm-istio
.Create the service:
$ oc create -f <service_name>.yaml (1)
1 The name of the service YAML file.