本文提供一个完整的可运行的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地址。