【k8s】单机集群部署istio
实验环境
kubernetes: 1.18.0
单节点,内存3G
安装步骤
1,下载istio,由于高版本的istio不支持1.18的k8s,故这里选取了1.9.6版本
https://github.com/istio/istio/releases/download/1.9.6/istio-1.9.6-linux-amd64.tar.gz
2,解压
3,单节点k8s集群必须取消taint,否则istio服务会一直处于pending状态无法执行
1 kubectl taint nodes <你的节点名> node-role.kubernetes.io/master:NoSchedule-
4,安装istio
istioctl install --set profile=demo -y
学习用,建议就使用demo这个内置的配置,这个配置会使用较小的内存,并且部署上ingress组件。
如果使用profile=default,则需要k8s集群中,至少有2G内存的富余量,才能正常启动pod
5,给需要istio转发的namespace增加label,增加后,启动的pod会自动注入sidecar
kubectl label namespace default istio-injection=enabled
6,部署istio的gateway网关
kubectl apply -f istio-gateway.yaml
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: istio-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"
7,在default这个namespace下部署一个nginx应用,pod端口设置为8000
kubectl apply -f nginx.yaml
nginx.yaml
apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx service: nginx spec: ports: - port: 8000 name: http targetPort: 80 selector: app: nginx --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx version: v1 spec: replicas: 1 selector: matchLabels: app: nginx version: v1 template: metadata: labels: app: nginx version: v1 spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80
8,创建一个vs,用于路由匹配
kubectl apply -f nginx-vs.yaml
nginx-vs.yaml
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: nginx spec: hosts: - "*" gateways: - istio-gateway http: - match: - uri: prefix: / route: - destination: host: nginx port: number: 8000
这条vs的含义为,将任何主机的/这个URL,通过isto-gateway转发给nginx这个service的8000端口
9,查看istio网关的外部地址
kubectl get service -n istio-system
可以看到,本地单机的k8s集群,没有可用的外部地址,那就用nodeport访问即可
10,访问看看请求是否转发给nginx
11,后续再增加应用,就可以通过创建deployment, service和vs来实现请求通过istio转发给service了。