istio部署与简单应用

127 阅读2分钟

istio部署与简单应用

基于k8s运行

文档:istio.io/latest/docs…

部署

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.0 TARGET_ARCH=x86_64 sh -
cd istio-1.17.0
echo export PATH=$PATH:`pwd`/bin > /etc/profile.d/istio.sh
. /etc/profile.d/istio.sh

#命令补全
source <(istioctl completion bash)
istioctl completion bash > /etc/bash_completion.d/istioctl

#使用k8s的cni插件配置网络
istioctl install -s profile=demo -s components.cni.enabled=true -y



#安装插件
kubectl apply -f samples/addons/


#为命名空间开启自动注入envoy
kubectl label namespace default istio-injection=enabled

#为ingress-gw配置外部访问ip
ip link a vip0 2.2.2.16/32 type dummy
ip add a 2.2.2.16/32 dev vip0
kubectl patch svc -n istio-system istio-ingressgateway -p '{"spec":{"externalIPs":["2.2.2.16"]}}'

配置kiali和grafana

#配置kiali
cat <<eof |kubectl apply -f -
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: kiali-gw
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - kiali.hj.com
    port:
      name: http
      number: 80
      protocol: HTTP
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: kiali-vs
  namespace: istio-system
spec:
  gateways:
  - kiali-gw
  hosts:
  - kiali.hj.com
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: kiali
        port:
          number: 20001
eof

#配置grafana
cat <<eof |kubectl apply -f -
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: grafana-gw
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - grafana.hj.com
    port:
      name: http
      number: 80
      protocol: HTTP
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: grafana-vs
  namespace: istio-system
spec:
  gateways:
  - grafana-gw
  hosts:
  - grafana.hj.com
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: grafana
        port:
          number: 3000
eof

#加入主机名解析
echo 2.2.2.16 kiali.hj.com grafana.hj.com >> /etc/hosts

运行示例

#运行测试svc、deploy
cat <<eof |kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
  labels:
    app: demoapp
  name: demoapp
spec:
  ports:
  - name: http-80-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: demoapp
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: demoapp
    version: v1.0
  name: demoapp-10
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demoapp
      version: v1.0
  template:
    metadata:
      labels:
        app: demoapp
        version: v1.0
    spec:
      containers:
      - image: ikubernetes/demoapp:v1.0
        name: demoapp
        ports:
        - containerPort: 80
          name: web
          protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: demoapp
    version: v1.1
  name: demoapp-11
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demoapp
      version: v1.1
  template:
    metadata:
      labels:
        app: demoapp
        version: v1.1
    spec:
      containers:
      - image: ikubernetes/demoapp:v1.1
        name: demoapp
        ports:
        - containerPort: 80
          name: web
          protocol: TCP
eof

#创建gw、vs、dr
cat <<eof |kubectl apply -f -
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: demoapp-gw
  namespace: default
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - www.hj.com
    port:
      name: http
      number: 80
      protocol: HTTP
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: demoapp-vs
  namespace: default
spec:
  gateways:
  - demoapp-gw
  - mesh
  hosts:
  - www.hj.com
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: demoapp
        port:
          number: 80
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: demoapp-dr
  namespace: default
spec:
  host: demoapp
  trafficPolicy:
    tls:
      mode: DISABLE
eof

#分析配置是否有问题
istioctl analyze

image.png