-
新建一個busybox的客戶端資源,與應用不在同一命名空間中,當然也可以在同一命名空間中;創建命名空間istioclient,並設置istio自動注入
sudo kubectl create namespace istioclient
sudo kubectl label namespace istioclient istio-injection=enabled
sudo kubectl get ns istioclient --show-labels # 查看注入狀態

-
client文件busybox-client.yaml內容
apiVersion: apps/v1
kind: Deployment
metadata:
name: busyclient
# namespace: istioclient
spec:
replicas: 1
selector:
matchLabels:
app: busyclient
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: busyclient
version: v1
spec:
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent # 不存在才拉取鏡像,默認值
command: [ "/bin/sh", "-c", "sleep 3600" ]

-
執行命令,創建Deployment:
sudo kubectl apply -f busybox-client.yaml -n istioclient
-
查看pod
sudo kubectl get pods -n istioclient

-
進入客戶端容器中,訪問springbootapp服務
sudo kubectl exec -it busyclient-5f6b7b954d-9wq5q /bin/sh -n istioclient

-
訪問springbootapp服務
wget -q -O - http://springbootapp-svc.springistiodemo:8080/hello

說明:
1.上述服務格式[servicename].[namespace]:[port]/[action]
客戶端與服務不在同一命名空間下,使用上述格式訪問服務,參考k8s的namespace隔離機制
2.如在同一命名空間下,則直接使用[servicename]:[port]/[action]訪問
for i in `seq 10`;do wget -q -O - http://springbootapp-svc:8080/hello;done
3.此處的port對應的是k8s的service(svc)節點的port端口值,不是nodePort端口設置值;
port是service端口,即k8s中服務之間的訪問端口
targetport是pod(也就是容器)的端口
nodeport是容器所在node節點的端口,即外部機器可訪問的端口。(通過nodeport類型的service暴露給集群節點)
4.busybox client客戶端也必須經過 Istio 注入,因為只有客戶端被 Istio 注入才可以接收到來自 Pilot 有關 Virtual Service 和 Destination Rule 的配置信息,才可以保證流量接管生效。
-
可以通過命令運行busybox,退出后pod自動刪除釋放
sudo kubectl run --namespace=springistiodemo busybox --rm -ti --image busybox /bin/sh
