L7路由支持多種能力,例如URI路徑匹配、請求頭匹配等。本文介紹實現L7路由相關能力的準備工作。
前提條件
已創建ASM企業版實例。具體操作,請參見創建ASM實例。
在創建服務網格頁面配置數據面模式時,選中啟用Ambient Mesh模式。
已創建Kubernetes集群,且滿足Kubernetes集群及配置要求。關于創建集群的具體操作,請參見創建Kubernetes專有版集群或創建Kubernetes托管版集群。
已添加集群到ASM實例。具體操作,請參見添加集群到ASM實例。
已按照實際操作系統及平臺,下載Istioctl服務網格調試工具。詳細信息,請參見Istio。
步驟一:將數據面模式設置為Ambient
將全局命名空間default的數據面模式設置為Ambient。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在全局命名空間頁面的數據面模式列,單擊default命名空間對應的切換為Ambient Mesh模式,在確認對話框,單擊確定。
步驟二:在數據面集群中部署服務
請結合實際場景,按需部署helloworld、sleep、httpbin、nginx或mocka服務。
部署helloworld服務
使用以下內容,創建helloworld-application.yaml。
apiVersion: v1 kind: Service metadata: name: helloworld labels: app: helloworld spec: ports: - port: 5000 name: http selector: app: helloworld --- apiVersion: v1 kind: ServiceAccount metadata: name: helloworld labels: account: helloworld --- apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-v1 labels: apps: helloworld version: v1 spec: replicas: 1 selector: matchLabels: app: helloworld version: v1 template: metadata: labels: app: helloworld version: v1 spec: serviceAccount: helloworld serviceAccountName: helloworld containers: - name: helloworld image: istio/examples-helloworld-v1 imagePullPolicy: IfNotPresent ports: - containerPort: 5000 --- apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-v2 labels: apps: helloworld version: v2 spec: replicas: 1 selector: matchLabels: app: helloworld version: v2 template: metadata: labels: app: helloworld version: v2 spec: serviceAccount: helloworld serviceAccountName: helloworld containers: - name: helloworld image: istio/examples-helloworld-v2 imagePullPolicy: IfNotPresent ports: - containerPort: 5000
在ACK集群對應的KubeConfig環境下,執行以下命令,部署helloworld應用。
kubectl apply -f helloworld-application.yaml
部署sleep服務
使用以下內容,創建sleep-application.yaml。
apiVersion: v1 kind: ServiceAccount metadata: name: sleep --- apiVersion: v1 kind: Service metadata: name: sleep labels: app: sleep service: sleep spec: ports: - port: 80 name: http selector: app: sleep --- apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: replicas: 1 selector: matchLabels: app: sleep template: metadata: labels: app: sleep spec: terminationGracePeriodSeconds: 0 serviceAccountName: sleep containers: - name: sleep image: curlimages/curl command: ["/bin/sleep", "3650d"] imagePullPolicy: IfNotPresent volumeMounts: - mountPath: /etc/sleep/tls name: secret-volume volumes: - name: secret-volume secret: secretName: sleep-secret optional: true
在ACK集群對應的KubeConfig環境下,執行以下命令,部署sleep應用。
kubectl apply -f sleep-application.yaml
部署httpbin服務
使用以下內容,創建httpbin-application.yaml。
apiVersion: v1 kind: ServiceAccount metadata: name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin labels: app: httpbin service: httpbin spec: ports: - name: http port: 8000 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: serviceAccountName: httpbin containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80
在ACK集群對應的KubeConfig環境下,執行以下命令,部署httpbin應用。
kubectl apply -f httpbin-application.yaml
部署nginx服務
使用以下內容,創建nginx應用。
apiVersion: v1 kind: ServiceAccount metadata: name: nginx --- apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx spec: ports: - name: http port: 8000 protocol: TCP targetPort: 80 selector: app: nginx type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: serviceAccountName: nginx containers: - image: 'nginx:1.7.9' imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 80 protocol: TCP resources: limits: cpu: 500m terminationMessagePath: /dev/termination-log terminationMessagePolicy: File
在ACK集群對應的KubeConfig環境下,執行以下命令,部署nginx應用。
kubectl apply -f nginx.yaml
部署mocka服務
使用以下內容,創建mocka-application.yaml。
apiVersion: v1 kind: ServiceAccount metadata: name: mocka namespace: default --- apiVersion: v1 kind: Service metadata: name: mocka labels: app: mocka service: mocka spec: ports: - port: 8000 name: http selector: app: mocka --- apiVersion: apps/v1 kind: Deployment metadata: name: mocka-v1 labels: app: mocka version: v1 spec: replicas: 1 selector: matchLabels: app: mocka version: v1 ASM_TRAFFIC_TAG: v1 template: metadata: labels: app: mocka version: v1 ASM_TRAFFIC_TAG: v1 spec: serviceAccountName: mocka containers: - name: default image: docker.io/vifoggy/gobin:1.0.0 imagePullPolicy: IfNotPresent env: - name: version value: v1 - name: app value: mocka ports: - containerPort: 8000 --- apiVersion: apps/v1 kind: Deployment metadata: name: mocka-v2 labels: app: mocka version: v2 spec: replicas: 1 selector: matchLabels: app: mocka version: v2 ASM_TRAFFIC_TAG: v2 template: metadata: labels: app: mocka version: v2 ASM_TRAFFIC_TAG: v2 spec: serviceAccountName: mocka containers: - name: default image: docker.io/vifoggy/gobin:1.0.0 imagePullPolicy: IfNotPresent env: - name: version value: v2 - name: app value: mocka ports: - containerPort: 8000
在ACK集群對應的KubeConfig環境下,執行以下命令,部署mocka應用。
kubectl apply -f mocka-application.yaml