【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了。

 

posted @ 2022-09-17 14:57  郑立赛  阅读(564)  评论(0编辑  收藏  举报