k8s 安装istio (一)

前置条件

已经完成 K8S安装过程十:Kubernetes CNI插件与CoreDNS服务部署

部署 istio 服务网格与 Ingress 服务用到了 helm kubectl 这两个命令行工具,这个命令行工具依赖 ~/.kube/config 这个配置文件,目前只在 kubernetes master 节点中生成了这个文件。

以下操作在 Kubernetes Master 节点上执行。

1. 部署 istiod 服务

1.1 设置 helm 仓库

helm repo add istio https://istio-release.storage.googleapis.com/charts

helm repo update

1.2 安装 istio

  • 创建 istio 命名空间

kubectl create namespace istio-system

  • 部署 istio 服务

2.1 安装 ingress

kubectl create namespace istio-ingress

kubectl label namespace istio-ingress istio-injection=enabled

helm install istio-ingress istio/gateway -n istio-ingress --wait

2.2 修改 ingress svc 配置

kubectl edit svc istio-ingress -n istio-ingress

如下图红色框所示,将 type 的值替换成 NodePort。另外修改 ports 配置中的端口信息,后续外部服务访问 Kubernetes 集群内部的服务将会通过上述两个端口进行访问,一个用户 http 协议,另一个用于 https 协议。

2.3 重启 istio-ingress 服务

保存上述修改的配置文件后,服务会自动重启,如果没有重启,可通过手工重启 ingress 服务的方式执行一次重启。

kubectl rollout restart deployment istio-ingress -n istio-ingress

2.4 修改 HAProxy 配置

在 HAProxy 的每个节点中修改 /etc/haproxy/haproxy.cfg 文件,追加如下内容。(注意是追加不是覆盖,不要把之前配置的****kuber-apiserver 负载均衡配置删除了)

frontend http-web

bind *:80

mode tcp

option tcplog

default_backend http-web-backend

backend http-web-backend

mode tcp

option tcplog

balance roundrobin

default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100

server k8s-http-145 192.168.0.145:30080 check

server k8s-http-200 192.168.0.200:30080 check

frontend https

bind *:443

mode tcp

option tcplog

default_backend https-backend

backend https-backend

mode tcp

option tcplog

balance roundrobin

default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100

server k8s-https-145 192.168.0.145:30443 check

server k8s-https-200 192.168.0.200:30443 check

2.5 重启 haproxy 服务

systemctl restart haproxy

重启所有的 HAProxy 节点。重启完成后,即可对 80 端口和 443 端口访问的流量转发到 30080 与 30443 端口,从而将外部流量引入到 Kubernetes 容器集群内部的 Ingress 服务中。Ingress 根据转发规则将流量转发到具体的容器服务内,实现外部客户端访问容器内部服务的过程

2.6 创建 Ingress 转发规则

  • 创建 gateway.yaml 文件

apiVersion: networking.istio.io/v1alpha3

kind: Gateway

metadata:

name: admin-gateway

namespace: istio-system

spec:

selector:

istio: ingress

servers:

  • port:

number: 1080

name: http-gateway

protocol: HTTP

hosts:

number: 3443

name: https-gateway

protocol: HTTPS

tls:

mode: PASSTHROUGH

hosts:

上述配置中的 *.域名.com 为子域名,可申请一个域名,然后将子域名使用 DNS 解析到 Kubernetes Master 节点或者是负载均衡的 IP 地址。这一步需要在你的域名供应商管理后台设置域名解析规则。否则后续的操作无法进行。如果还没有域名的同学,则无法通过域名来设置 Ingress 转发规则。

kubectl apply -f gateway.yaml

  1. 部署服务网格管理工具

服务网格 istio 配套的管理工具有 kiali、grafana、jaeger、prometheus等,以下采用istio插件的方式部署这些管理工具,这种方式部署的管理工具参数比较通用,不太适合大规模的生产环境使用,如果在生产环境中部署这些服务网格管理工具,应对参数进行优化。

3.1 部署服务网格管理工具 Kiali

  • 部署 Kiali 服务

yum install socat -y

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.16/samples/addons/kiali.yaml

  • 创建 kiali-vs.yaml 文件

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

name: kiali-vs

namespace: istio-system

spec:

hosts:

gateways:

  • admin-gateway

http:

  • route:

  • destination:

host: kiali

port:

number: 20001

  • 部署 Kiali VirtualService

kubectl apply -f kiali-vs.yaml

3.2 部署服务网格可视化工具 Grafana

  • 部署 Grafana

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.16/samples/addons/grafana.yaml

  • 创建 grafana-vs.yaml 文件

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

name: grafana-vs

namespace: istio-system

spec:

hosts:

gateways:

  • admin-gateway

http:

  • route:

  • destination:

host: grafana

port:

number: 3000

3.3 部署服务网格调用链检测工具 Jaeger

  • 部署 Jaeger 服务
相关推荐
Java之美1 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵2 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
武子康5 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
2601_961875248 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj8 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
程序员老赵8 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
正经教主8 天前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang8 天前
Docker 使用完整指南
运维·docker·容器
正经教主8 天前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器