Istio服务网格注入
# Istio服务网格注入
# Istio 服务网格
服务网格允许监控、可视化和控制 Pod 之间的流量。Kubevirt 支持将 VM 作为 Istio 服务网格的一部分运行。
# 对于限制
- 仅 pod 网络伪装绑定支持 Istio 服务网格。
- Istio 出于自己的目的使用端口列表 (opens new window),这些端口不得在 VMI 接口中显式指定。
- Istio 仅支持 IPv4。
# 先决条件
Istio 已部署并使用 Istio CNI 插件。有关更多信息,请参阅Istio 文档 (opens new window)。
(可选)
istioctl
二进制用于故障排除。请参阅 Istio安装说明 (opens new window)。创建 VM 的目标命名空间必须使用
istio-injection=enabled
label 进行标记。如果使用 Multus 管理 CNI,
NetworkAttachmentDefinition
则应用命名空间中需要以下内容:apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: istio-cni
# 检查当前环境
1.这里准备了Istio服务网格的环境,包括部署了相关的插件。
2.需要在创建的vmi资源的命名空间,或者是default命名空间指定istio-injection=enabled的标签
。
[root@k8s-master-node1 ~]# kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-6ccd56f4b6-prl2b 1/1 Running 0 10m
istio-egressgateway-7f4864f59c-bdt8d 1/1 Running 0 10m
istio-ingressgateway-55d9fb9f-b9kk2 1/1 Running 0 10m
istiod-555d47cb65-wjmpc 1/1 Running 0 11m
jaeger-5d44bc5c5d-8ls89 1/1 Running 0 10m
kiali-9f9596d69-wdqsh 1/1 Running 0 10m
prometheus-64fd8ccd65-bs6wn 2/2 Running 0 10m
[root@k8s-master-node1 ~]# kubectl get namespaces --show-labels | grep istio
default Active 36h istio-injection=enabled,kubernetes.io/metadata.name=default
istio-system Active 11m kubernetes.io/metadata.name=istio-system
# Istio代理注入
创建一个启用了 Istio 代理注入的 VirtualMachineInstance
示例指定了一个带有伪装网络接口和sidecar.istio.io/inject
注释的 VMI,以将 VM 注册到服务网格。
apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:
annotations:
sidecar.istio.io/inject: "true"
labels:
app: vmi-istio
name: vmi-istio
spec:
domain:
devices:
interfaces:
- name: default
masquerade: {}
disks:
- disk:
bus: virtio
name: containerdisk
resources:
requests:
memory: 1024M
networks:
- name: default
pod: {}
terminationGracePeriodSeconds: 0
volumes:
- name: containerdisk
containerDisk:
image: centos-vm:v1
Istio 期望每个应用程序至少与一个 Kubernetes 服务相关联。创建以下公开端口 8080 的服务:
**注意:**每个启用 Istio 的 VMI 都必须具有
sidecar.istio.io/inject
指示 KubeVirt 执行必要网络配置的注释。
apiVersion: v1
kind: Service
metadata:
name: vmi-istio
spec:
selector:
app: vmi-istio
ports:
- port: 8080
name: http
protocol: TCP
# 确认
验证 istio-proxy sidecar 已部署并且能够使用istioctl proxy-status
命令与 Istio 控制平面同步。
[root@k8s-master-node1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
virt-launcher-vmi-istio-zsvhw 3/3 Running 0 12m
[root@k8s-master-node1 ~]# kubectl get pods virt-launcher-vmi-istio-zsvhw -o jsonpath='{.spec.containers[*].name}'
compute volumecontainerdisk istio-prox
[root@k8s-master-node1 ~]# istioctl proxy-status
NAME CDS LDS EDS RDS ISTIOD VERSION
istio-egressgateway-7f4864f59c-bdt8d.istio-system SYNCED SYNCED SYNCED NOT SENT istiod-555d47cb65-wjmpc 1.12.0
istio-ingressgateway-55d9fb9f-b9kk2.istio-system SYNCED SYNCED SYNCED NOT SENT istiod-555d47cb65-wjmpc 1.12.0
virt-launcher-vmi-istio-zsvhw.default SYNCED SYNCED SYNCED SYNCED istiod-555d47cb65-wjmpc 1.12.0
上次更新: 2023/11/28, 22:03:59