Myluzh Blog

K8S 使用Istioctl安装Istio,配置Kiali Token登录

发布时间: 2024-1-31 文章作者: myluzh 分类名称: Kubernetes 朗读文章


0x01 安装istio
[root@k8s-master01 istio]# wget https://github.com/istio/istio/releases/download/1.20.2/istio-1.20.2-linux-amd64.tar.gz
[root@k8s-master01 istio]# tar -zxvf istio-1.20.2-linux-amd64.tar.gz 
[root@k8s-master01 istio]# cd istio-1.20.2/bin/
# 对于本次安装,我们采用 demo 配置组合。https://istio.io/latest/zh/docs/setup/additional-setup/config-profiles/
[root@k8s-master01 bin]# ./istioctl install --set profile=demo -y                                                                                            
# 安装完成
[root@k8s-master01 bin]# kubectl get pod -A | grep istio
istio-system    istio-egressgateway-684596759b-hhcgg                     1/1     Running     0              4m28s
istio-system    istio-ingressgateway-56c8df6d5d-tcdzd                    1/1     Running     0              4m28s
istio-system    istiod-cd9fcbdf7-nvbjb                                   1/1     Running     0              4m44s

# !生产环境推荐使用profile=default安装, 并用 "--set hub=xxx" 设置私有镜像仓
[root@k8s-master01 bin]# ./istioctl install --set profile=default --set hub=172.30.82.223:5443/istio 
给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理
[root@k8s-master01 bin]# kubectl label namespace default istio-injection=enabled
namespace/default labeled

0x02 部署示例应用(可跳过)
# 部署 Bookinfo 示例应用
[root@k8s-master01 istio-1.20.2]# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
...
# 等待资源完成 通过检查返回的页面标题来验证应用是否已在集群中运行,并已提供网页服务:
[root@k8s-master01 istio-1.20.2]# kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
# 修改为nodeport类型
[root@k8s-master01 istio-1.20.2]# kubectl edit svc  productpage
# 查看nodeport端口 这边为31166 访问http://nodeip:31166/productpage 查看页面
[root@k8s-master01 istio-1.20.2]# kubectl get svc | grep productpage
productpage       NodePort    10.43.26.232            9080:31166/TCP      93m

0x03 安装kiali仪表盘,配置token登录
1、安装kiali
[root@k8s-master01 istio-1.20.2]# kubectl apply -f samples/addons
# 等待完成
[root@k8s-master01 istio-1.20.2]# kubectl rollout status deployment/kiali -n istio-system
deployment "kiali" successfully rolled out
# 修改kiali为nodeport
[root@k8s-master01 istio-1.20.2]# kubectl edit  svc  kiali -n istio-system
#查看nodeport端口 这边为 http://nodeip:32027/
[root@k8s-master01 istio-1.20.2]# kubectl get svc  -n istio-system | grep kiali
kiali                  NodePort       10.43.152.154   <none>        20001:32027/TCP,9090:32099/TCP
2、把kaili通过ingress暴露出来
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kiali-ingress
  namespace: istio-system
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx 
  rules:
  - host: kiali.hello.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kiali
            port:
              number: 20001
3、kaili开启token登录
kaili默认是直接可以访问,不太安全,所以可以修改成k8s_token登录。https://kiali.io/docs/configuration/authentication/token/
# 修改kiali的configmap文件,把strategy改为token
kubectl edit configmap kiali -n istio-system

spec:
  auth:
    strategy: token
# 修改配置后,需要重启 Kiali 以使更改生效
kubectl rollout restart deployment kiali -n istio-system
4、获取token,登录kaili
# 创建创建一个用于 Kiali 的 ServiceAccount
kubectl create serviceaccount kiali-user -n istio-system
# 确保 ServiceAccount 具有访问 Kiali 所需的权限。例如,绑定 kiali-viewer 角色
kubectl create rolebinding kiali-user-viewer --clusterrole=kiali-viewer --serviceaccount=istio-system:kiali-user -n istio-system
# 获取token
# Kubernetes 会自动为每个 ServiceAccount 创建一个 Secret,其中包含 Token。可以通过以下步骤获取 Token:
kubectl get secret $(kubectl get serviceaccount kiali-user -n istio-system -o jsonpath='{.secrets[0].name}') -n istio-system -o jsonpath='{.data.token}' | base64 --decode 
# 如果 Kubernetes 版本较新(1.24+),可能不会自动创建 Secret。可以手动创建一个 Token:
kubectl create token kiali-user -n istio-system

#####上面的权限不够 需要自己加权限,也可以直接用下面的 集群管理员的token ###
kubectl create serviceaccount cluster-admin-sa -n default
kubectl create clusterrolebinding cluster-admin-binding \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-sa
kubectl get secret $(kubectl get serviceaccount cluster-admin-sa -n default -o jsonpath='{.secrets[0].name}') -n default -o jsonpath='{.data.token}' | base64 --decode

0x04 卸载istio
# 完全卸载istio
istioctl x uninstall --purge -n istio-system
kubectl delete namespace istio-system

参考链接:
istio入门文档 https://istio.io/latest/zh/docs/setup/getting-started/

标签: istio service mesh istioctl

发表评论