k8sGPT scanning minikube on Macbook

k8sGPT scanning minikube on Macbook
www.zeeklog.com  - k8sGPT scanning minikube on Macbook

文章目录

引言

在现代应用程序开发中,Kubernetes(简称K8s)已经成为了容器编排的标准。Minikube作为一个轻量级的本地Kubernetes集群环境,为开发和测试提供了极大的便利。今天,我将分享如何在MacBook上使用k8sGPT扫描Minikube集群,以确保我们的Kubernetes集群设置和应用程序的最佳实践。

$ minikube start --nodes 2 -p multinode-demo
😄  Darwin 14.5 (arm64) 上的 [multinode-demo] minikube v1.33.1
✨  自动选择 docker 驱动。其他选项:parallels, ssh
📌  使用具有 root 权限的 Docker Desktop 驱动程序
👍  Starting "multinode-demo" primary control-plane node in "multinode-demo" cluster
🚜  Pulling base image v0.0.44 ...
    > gcr.io/k8s-minikube/kicbase...:  435.76 MiB / 435.76 MiB  100.00% 6.65 Mi
🔥  Creating docker container (CPUs=2, Memory=7792MB) ...
🌐  找到的网络选项:
    ▪ HTTP_PROXY=192.168.21.101:7890
❗  You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP (192.168.49.2).
📘  Please see https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/ for more details
    ▪ HTTPS_PROXY=192.168.21.101:7890
🐳  正在 Docker 26.1.1 中准备 Kubernetes v1.30.0…
    ▪ env HTTP_PROXY=192.168.21.101:7890
    ▪ env HTTPS_PROXY=192.168.21.101:7890
    ▪ 正在生成证书和密钥...
    ▪ 正在启动控制平面...
    ▪ 配置 RBAC 规则 ...
🔗  配置 CNI (Container Networking Interface) ...
🔎  正在验证 Kubernetes 组件...
    ▪ 正在使用镜像 gcr.io/k8s-minikube/storage-provisioner:v5
🌟  启用插件: default-storageclass, storage-provisioner

👍  Starting "multinode-demo-m02" worker node in "multinode-demo" cluster
🚜  Pulling base image v0.0.44 ...
🔥  Creating docker container (CPUs=2, Memory=7792MB) ...
🌐  找到的网络选项:
    ▪ NO_PROXY=192.168.49.2
    ▪ HTTP_PROXY=192.168.21.101:7890
❗  You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP (192.168.49.3).
📘  Please see https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/ for more details
    ▪ HTTPS_PROXY=192.168.21.101:7890
🐳  正在 Docker 26.1.1 中准备 Kubernetes v1.30.0…
    ▪ env HTTP_PROXY=192.168.21.101:7890
    ▪ env HTTPS_PROXY=192.168.21.101:7890
    ▪ env NO_PROXY=192.168.49.2
🔎  正在验证 Kubernetes 组件...
🏄  完成!kubectl 现在已配置,默认使用"multinode-demo"集群和"default"命名空间
$ kubectl get node
NAME                 STATUS   ROLES           AGE    VERSION
multinode-demo       Ready    control-plane   2m3s   v1.30.0
multinode-demo-m02   Ready    <none>          103s   v1.30.0
$ minikube status -p multinode-demo
multinode-demo
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

multinode-demo-m02
type: Worker
host: Running
kubelet: Running

$ minikube addons list
|-----------------------------|--------------------------------|
|         ADDON NAME          |           MAINTAINER           |
|-----------------------------|--------------------------------|
| ambassador                  | 3rd party (Ambassador)         |
| auto-pause                  | minikube                       |
| cloud-spanner               | Google                         |
| csi-hostpath-driver         | Kubernetes                     |
| dashboard                   | Kubernetes                     |
| default-storageclass        | Kubernetes                     |
| efk                         | 3rd party (Elastic)            |
| freshpod                    | Google                         |
| gcp-auth                    | Google                         |
| gvisor                      | minikube                       |
| headlamp                    | 3rd party (kinvolk.io)         |
| helm-tiller                 | 3rd party (Helm)               |
| inaccel                     | 3rd party (InAccel             |
|                             | [[email protected]])            |
| ingress                     | Kubernetes                     |
| ingress-dns                 | minikube                       |
| inspektor-gadget            | 3rd party                      |
|                             | (inspektor-gadget.io)          |
| istio                       | 3rd party (Istio)              |
| istio-provisioner           | 3rd party (Istio)              |
| kong                        | 3rd party (Kong HQ)            |
| kubeflow                    | 3rd party                      |
| kubevirt                    | 3rd party (KubeVirt)           |
| logviewer                   | 3rd party (unknown)            |
| metallb                     | 3rd party (MetalLB)            |
| metrics-server              | Kubernetes                     |
| nvidia-device-plugin        | 3rd party (NVIDIA)             |
| nvidia-driver-installer     | 3rd party (Nvidia)             |
| nvidia-gpu-device-plugin    | 3rd party (Nvidia)             |
| olm                         | 3rd party (Operator Framework) |
| pod-security-policy         | 3rd party (unknown)            |
| portainer                   | 3rd party (Portainer.io)       |
| registry                    | minikube                       |
| registry-aliases            | 3rd party (unknown)            |
| registry-creds              | 3rd party (UPMC Enterprises)   |
| storage-provisioner         | minikube                       |
| storage-provisioner-gluster | 3rd party (Gluster)            |
| storage-provisioner-rancher | 3rd party (Rancher)            |
| volumesnapshots             | Kubernetes                     |
| yakd                        | 3rd party (marcnuri.com)       |
|-----------------------------|--------------------------------|
$ kubectl create deployment hello-minikube1 --image=kicbase/echo-server:1.0
deployment.apps/hello-minikube1 created
$ kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
service/hello-minikube1 exposed
$ kubectl get pod -A
NAMESPACE     NAME                                     READY   STATUS              RESTARTS        AGE
default       hello-minikube1-67bf99b564-jstcc         0/1     ContainerCreating   0               12s
kube-system   coredns-7db6d8ff4d-85s2n                 1/1     Running             2 (3m16s ago)   3m43s
kube-system   etcd-multinode-demo                      1/1     Running             0               3m57s
kube-system   kindnet-wtzgz                            1/1     Running             0               3m44s
kube-system   kindnet-zwhtz                            1/1     Running             0               3m39s
kube-system   kube-apiserver-multinode-demo            1/1     Running             0               3m57s
kube-system   kube-controller-manager-multinode-demo   1/1     Running             0               3m57s
kube-system   kube-proxy-8t4fd                         1/1     Running             0               3m39s
kube-system   kube-proxy-dxhnv                         1/1     Running             0               3m44s
kube-system   kube-scheduler-multinode-demo            1/1     Running             0               3m57s
kube-system   storage-provisioner                      1/1     Running             1 (3m32s ago)   3m55s
$ kubectl get pod -A
NAMESPACE     NAME                                     READY   STATUS              RESTARTS        AGE
default       hello-minikube1-67bf99b564-jstcc         0/1     ContainerCreating   0               16s
kube-system   coredns-7db6d8ff4d-85s2n                 1/1     Running             2 (3m20s ago)   3m47s
kube-system   etcd-multinode-demo                      1/1     Running             0               4m1s
kube-system   kindnet-wtzgz                            1/1     Running             0               3m48s
kube-system   kindnet-zwhtz                            1/1     Running             0               3m43s
kube-system   kube-apiserver-multinode-demo            1/1     Running             0               4m1s
kube-system   kube-controller-manager-multinode-demo   1/1     Running             0               4m1s
kube-system   kube-proxy-8t4fd                         1/1     Running             0               3m43s
kube-system   kube-proxy-dxhnv                         1/1     Running             0               3m48s
kube-system   kube-scheduler-multinode-demo            1/1     Running             0               4m1s
kube-system   storage-provisioner                      1/1     Running             1 (3m36s ago)   3m59s
$ brew install k8sgpt
==> Downloading https://formulae.brew.sh/api/formula.jws.json
############################################################################################################################################################################################################################################## 100.0%
==> Downloading https://formulae.brew.sh/api/cask.jws.json
############################################################################################################################################################################################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/k8sgpt/manifests/0.3.40
############################################################################################################################################################################################################################################## 100.0%
==> Fetching k8sgpt
==> Downloading https://ghcr.io/v2/homebrew/core/k8sgpt/blobs/sha256:e22d500e85a13ae94bce5be3471eb9c2fc10b343fc335adb9fd6c39a9adfc9bd
############################################################################################################################################################################################################################################## 100.0%
==> Pouring k8sgpt--0.3.40.arm64_sonoma.bottle.tar.gz
🍺  /opt/homebrew/Cellar/k8sgpt/0.3.40: 7 files, 89.3MB
==> Running `brew cleanup k8sgpt`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
$ k8sgpt generate


Opening: https://beta.openai.com/account/api-keys to generate a key for openai

Please copy the generated key and run `k8sgpt auth add` to add it to your config file

$ k8sgpt auth add
Warning: backend input is empty, will use the default value: openai
Warning: model input is empty, will use the default value: gpt-3.5-turbo
Enter openai Key: openai added to the AI backend provider list
$ k8sgpt analyze --explain
AI Provider: openai

No problems detected

$ k8sgpt analyze --explain --with-doc
AI Provider: openai

No problems detected

$ k8sgpt analyze --explain --filter=Pod --namespace=default
AI Provider: openai

No problems detected

$ k8sgpt analyze --explain --filter=Service --output=json
{
  "provider": "openai",
  "errors": null,
  "status": "OK",
  "problems": 0,
  "results": null
}
$ k8sgpt analyze --explain --filter=Service --output=json --anonymize
{
  "provider": "openai",
  "errors": null,
  "status": "OK",
  "problems": 0,
  "results": null
}
$ k8sgpt filters list
Active:
> PersistentVolumeClaim
> Ingress
> Deployment
> ReplicaSet
> Service
> StatefulSet
> CronJob
> Node
> ValidatingWebhookConfiguration
> MutatingWebhookConfiguration
> Pod
Unused:
> Log
> GatewayClass
> Gateway
> HTTPRoute
> HorizontalPodAutoScaler
> PodDisruptionBudget
> NetworkPolicy
$ k8sgpt filters add Log
Warning: by enabling logs, you will be sending potentially sensitive data to the AI backend.
Filter Log added
$ k8sgpt filters list
Active:
> Service
> Node
> StatefulSet
> CronJob
> Log
> Ingress
> MutatingWebhookConfiguration
> ValidatingWebhookConfiguration
> Pod
> Deployment
> ReplicaSet
> PersistentVolumeClaim
Unused:
> HorizontalPodAutoScaler
> PodDisruptionBudget
> NetworkPolicy
> GatewayClass
> Gateway
> HTTPRoute
$ k8sgpt auth list
Default:
> openai
Active:
> openai
Unused:
> localai
> ollama
> azureopenai
> cohere
> amazonbedrock
> amazonsagemaker
> google
> noopai
> huggingface
> googlevertexai
> oci
> watsonxai

$ minikube stop  -p multinode-demo
✋  正在停止节点 "multinode-demo-m02" ...
🛑  正在通过 SSH 关闭“multinode-demo-m02”…
✋  正在停止节点 "multinode-demo" ...
🛑  正在通过 SSH 关闭“multinode-demo”…
🛑  2 个节点已停止。

$ docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                   CREATED          STATUS                        PORTS     NAMES
19a65b1bbc03   gcr.io/k8s-minikube/kicbase:v0.0.44   "/usr/local/bin/entr…"   45 minutes ago   Exited (130) 48 seconds ago             multinode-demo-m02
0f2e98799a5a   gcr.io/k8s-minikube/kicbase:v0.0.44   "/usr/local/bin/entr…"   45 minutes ago   Exited (130) 37 seconds ago             multinode-demo
b3c3c3c6fec6   ghcr.io/open-webui/open-webui:main    "bash start.sh"           3 months ago     Exited (0) 13 days ago                  open-webui

实践体验

在我的实践中,k8sGPT帮助我发现了一些常见的配置问题,如资源限制未设置、未使用最新的镜像版本等。这些问题可能看起来微不足道,但在生产环境中可能会导致性能下降或安全隐患。

此外,k8sGPT还建议了很多优化措施,例如使用ConfigMap和Secret来管理配置数据,避免将敏感信息直接硬编码到Pod中。通过这些建议,我的Minikube集群变得更加健壮和高效。

总结

通过在MacBook上使用k8sGPT扫描Minikube集群,我们可以快速发现和解决Kubernetes集群中的潜在问题。Minikube提供了一个方便的本地开发环境,而k8sGPT则为集群的健康和优化提供了强有力的支持。希望这篇文章能帮助你在使用Kubernetes时更加得心应手。如果你还没有尝试过k8sGPT,强烈推荐你在你的开发环境中试试它。

参考:

  • https://github.com/k8sgpt-ai/k8sgpt
  • https://minikube.sigs.k8s.io/docs/tutorials/multi_node/

Read more

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.