-
新建一個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