Istio示例

61 阅读2分钟

本文提供一个完整的可运行的Istio示例,包括安装Istio、部署Bookinfo应用程序,并配置Istio网关来访问应用程序。请按照以下步骤进行操作:

1. 安装Istio

首先,确保你已经安装了Istio CLI(istioctl)。你可以从Istio官方文档获取最新的安装指引。

curl -L https://istio.io/downloadIstio | sh -
cd istio-<version>
export PATH=$PWD/bin:$PATH

2. 部署Istio控制平面

使用以下命令将Istio控制平面部署到Kubernetes集群:

istioctl install --set profile=demo -y

3. 命名空间自动注入

为应用程序命名空间启用自动Sidecar注入。例如,创建一个名为default的命名空间并启用自动注入:

kubectl label namespace default istio-injection=enabled

4. 部署Bookinfo应用程序

default命名空间中部署Bookinfo应用程序:

创建一个名为bookinfo.yaml的文件,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: productpage
  labels:
    app: productpage
    service: productpage
spec:
  ports:
  - port: 9080
    name: http
  selector:
    app: productpage
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: productpage-v1
  labels:
    app: productpage
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: productpage
      version: v1
  template:
    metadata:
      labels:
        app: productpage
        version: v1
    spec:
      containers:
      - name: productpage
        image: docker.io/istio/examples-bookinfo-productpage-v1:1.16.2
        ports:
        - containerPort: 9080
---
apiVersion: v1
kind: Service
metadata:
  name: details
  labels:
    app: details
    service: details
spec:
  ports:
  - port: 9080
    name: http
  selector:
    app: details
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: details-v1
  labels:
    app: details
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: details
      version: v1
  template:
    metadata:
      labels:
        app: details
        version: v1
    spec:
      containers:
      - name: details
        image: docker.io/istio/examples-bookinfo-details-v1:1.16.2
        ports:
        - containerPort: 9080
---
apiVersion: v1
kind: Service
metadata:
  name: reviews
  labels:
    app: reviews
    service: reviews
spec:
  ports:
  - port: 9080
    name: http
  selector:
    app: reviews
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: reviews-v1
  labels:
    app: reviews
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: reviews
      version: v1
  template:
    metadata:
      labels:
        app: reviews
        version: v1
    spec:
      containers:
      - name: reviews
        image: docker.io/istio/examples-bookinfo-reviews-v1:1.16.2
        ports:
        - containerPort: 9080
---
apiVersion: v1
kind: Service
metadata:
  name: ratings
  labels:
    app: ratings
    service: ratings
spec:
  ports:
  - port: 9080
    name: http
  selector:
    app: ratings
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ratings-v1
  labels:
    app: ratings
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ratings
      version: v1
  template:
    metadata:
      labels:
        app: ratings
        version: v1
    spec:
      containers:
      - name: ratings
        image: docker.io/istio/examples-bookinfo-ratings-v1:1.16.2
        ports:
        - containerPort: 9080

应用这个文件:

kubectl apply -f bookinfo.yaml

5. 创建Istio入口网关

创建一个名为bookinfo-gateway.yaml的文件,内容如下:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - "*"
  gateways:
  - bookinfo-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        prefix: /static
    - uri:
        exact: /login
    - uri:
        exact: /logout
    route:
    - destination:
        host: productpage
        port:
          number: 9080

应用这个文件:

kubectl apply -f bookinfo-gateway.yaml

6. 验证部署

确保所有Pod都在运行:

kubectl get pods

获取Istio入口网关的外部IP地址:

kubectl get svc istio-ingressgateway -n istio-system

7. 访问应用程序

使用浏览器访问Bookinfo应用程序。在浏览器中输入以下URL:

http://<EXTERNAL-IP>/productpage

<EXTERNAL-IP>替换为你的Istio入口网关的外部IP地址。