【运维知识大神篇】运维界的超神器Kubernetes教程14(RBAC三种认证方式详解:基于用户+基于用户组+基于服务账号)

本篇文章继续给大家介绍Kubernetes,内容依旧烧脑,不过内容也已经过了一大半了,如果你把我Kubernetes前面的教程都看懂了的话,那么你已经很厉害了,坚持下去!本篇文章主要介绍RBAC的三种认证方式,分别是基于用户、基于用户组、基于服务账号的三种认证。

目录

RBAC

一、RBAC之基于用户授权案例

二、RBAC之基于用户组授权

1、创建用户组案例展示

2、创建用户加入用户组案例展示

三、RBAC基于服务账号

1、应用场景

2、创建方式

3、授权容器中的Python程序对K8s API访问权限案例

4、基于服务账号授权案例


RBAC

一、RBAC之基于用户授权案例

1、使用K8s ca签发客户端证

可以使用这个证书管理工具

下载地址:Releases · cloudflare/cfssl · GitHub

选择cfssl、cfssl-certinfo、cfssljson,当然下载下来名字不叫这个,我做了更名处理

将命令下载到主机加入/usr/bin下,再给予执行权限

[root@Master231 ~]# chmod +x cfssl*
[root@Master231 ~]# mv cfssl* /usr/bin/

编写证书请求

cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}
EOF

cat > koten-csr.json <<EOF
{
  "CN": "koten",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF

[root@Master231 user]# ls
ca-config.json  koten-csr.json

根据json配置文件生成证书

[root@Master231 user]# cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes koten-csr.json | cfssljson -bare koten

#生成后可以用这个命令查看证书详细信息
[root@Master231 user]# cfssl-certinfo -cert koten.pem 

2、生成kubeconfig授权文件

编写生成kubeconfig文件的脚本

cat > kubeconfig.sh <<'EOF'
# 配置集群
# --certificate-authority
#   指定K8s的ca根证书文件路径
# --embed-certs
#   如果设置为true,表示将根证书文件的内容写入到配置文件中
#   如果设置为false,则只是引用配置文件,后续使用配置文件会去找证书,不利于在别的主机使用
# --server
#   指定APIServer的地址。
# --kubeconfig
#   指定kubeconfig的配置文件名称
kubectl config set-cluster koten-linux \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --embed-certs=true \
  --server=https://10.0.0.231:6443 \
  --kubeconfig=koten-linux.kubeconfig
 
# 设置客户端认证
kubectl config set-credentials koten \
  --client-key=koten-key.pem \
  --client-certificate=koten.pem \
  --embed-certs=true \
  --kubeconfig=koten-linux.kubeconfig

# 设置默认上下文
kubectl config set-context linux \
  --cluster=koten-linux \
  --user=koten \
  --kubeconfig=koten-linux.kubeconfig

# 设置当前使用的上下文
kubectl config use-context linux --kubeconfig=koten-linux.kubeconfig
EOF

生成kubeconfig文件

[root@Master231 user]# bash kubeconfig.sh 
Cluster "koten-linux" set.
User "koten" set.
Context "linux" created.
Switched to context "linux".

3、创建RBAC授权策略

不会写可以手动创建一个-o yaml看它生成的yaml文件,或者去官网搜相关字样,不知道怎么看它所在的apiVersion可以通过下面命令查看

[root@Master231 storageclasses]# kubectl api-resources 

创建rbac等配置文件 

[root@Master231 user]# cat rbac.yaml
kind: Role    # 定义权限
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: linux-role-reader
rules:
  # API组,""表示核心组,该组包括但不限于"configmaps","nodes","pods","services"等资源.
  # 暂时这样理解:
  #    如果一个资源是apps/v1,则其组取"/"之前的,也就是apps.
  #    如果一个资源是v1,则默认为"/"。
  # 如果遇到不知道所述哪个组的也别着急,他会有报错提示,如下所示:
  #    User "koten" cannot list resource "deployments" in API group "apps" in the namespace "default"
  # 如上所示,表示的是"deployments"的核心组是"apps"。
- apiGroups: ["","apps"]  
  # 资源类型,不支持写简称,必须写全称哟!!
  # resources: ["pods","deployments"]  
  resources: ["pods","deployments","services"]  
  # 对资源的操作方法.
  # verbs: ["get", "list"]  
  verbs: ["get", "list","delete"]  
- apiGroups: ["","apps"]
  resources: ["configmaps","secrets","daemonsets"]
  verbs: ["get", "list"]  
- apiGroups: [""]        # 该规则可以解读为核心组的secrets资源有delete权限,其他规则依次类推
  resources: ["secrets"]
  verbs: ["delete"]  

---

kind: RoleBinding    # 将权限绑定给用户
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: koten-linux-resources-reader
  namespace: default
subjects:
  # 主体类型
- kind: User  
  # 用户名
  name: koten  
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # 角色类型
  kind: Role  
  # 绑定角色名称
  name: linux-role-reader
  apiGroup: rbac.authorization.k8s.io

应用rbac授权

[root@Master231 user]# kubectl apply -f rbac.yaml 

访问测试,发现有查看删除的Pod的权限和查看deploy,ds,svc,cm的权限,不想指定可以将该配置文件放在家目录下的隐藏目录.kube下的config文件

[root@Master231 user]# kubectl get pods --kubeconfig=koten-linux.kubeconfig
NAME        READY   STATUS    RESTARTS   AGE
linux-web   1/1     Running   0          8s
[root@Master231 user]# kubectl delete pods --all --kubeconfig=koten-linux.kubeconfig
pod "linux-web" deleted
[root@Master231 user]# kubectl get deploy,ds,svc,cm --kubeconfig=koten-linux.kubeconfig
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.200.0.1   <none>        443/TCP   2m40s

NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      10d
configmap/nginx.conf         1      4d20h

二、RBAC之基于用户组授权

用户组的好处是无需单独为某个用户创建权限,统一为这个组名进行授权,所有的用户都以组的身份访问资源。

1、创建用户组案例展示

需求说明: 为koten用户组统一授权
将certs.sh文件中的"koten-crs.json"下的O字段改成dev,并重新生成证书和kubeconfig文件;
将dev用户组绑定Role(pod-reader);
经测试,只要O字段都是dev,对于'CN'字段可以是任意用户,这些用户持有的kubeconfig文件都拥有相同的权限。

资源清单示例

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
	name: read-pods
	namespace: default
subjects:
- kind: Group
  name: koten
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

温馨提示

1、APIserver会优先校验用户名(CN字段),若用户名没有对应的权限,则再去校验用户组(O)的权限。
CN标识的是用户名称,比如"linux"。
O标识的是用户组,比如"dev"组。
2、用户,用户组都是提取证书中的一个字段,不是在集群中创建的。

1、使用K8s ca签发客户端证书

编写证书请求

cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}
EOF

cat > koten-csr.json <<EOF
{
  "CN": "linux",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "koten",
      "OU": "System"
    }
  ]
}
EOF

生成证书

[root@Master231 group]# cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes koten-csr.json | cfssljson -bare koten-groups

2、生成kubeconfig授权文件

编写生成kubeconfig文件的脚本

cat > kubeconfig.sh <<'EOF'
kubectl config set-cluster koten-linux-groups \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --embed-certs=false \
  --server=https://10.0.0.231:6443 \
  --kubeconfig=koten-linux.kubeconfig
 
# 设置客户端认证
kubectl config set-credentials koten \
  --client-key=koten-groups-key.pem \
  --client-certificate=koten-groups.pem \
  --embed-certs=false \
  --kubeconfig=koten-linux.kubeconfig

# 设置默认上下文
kubectl config set-context linux-groups \
  --cluster=koten-linux-groups \
  --user=koten \
  --kubeconfig=koten-linux.kubeconfig

# 设置当前使用的上下文
kubectl config use-context linux-groups --kubeconfig=koten-linux.kubeconfig
EOF

生成kubeconfig文件

[root@Master231 group]# bash kubeconfig.sh 
Cluster "koten-linux-groups" set.
User "koten" set.
Context "linux-groups" created.
Switched to context "linux-groups".

3、创建RBAC授权策略并运行授权

[root@Master231 group]# cat rbac.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: linux-role-reader
rules:
  # API组,""表示核心组,该组包括但不限于"configmaps","nodes","pods","services"等资源.
  # 想要知道哪个资源使用在哪个组,我们只需要根据"kubectl api-resources"命令等输出结果就可以轻松判断哟~
  # API组,""表示核心组。
- apiGroups: ["","apps"]  
  # 资源类型,不支持写简称,必须写全称哟!!
  resources: ["pods","nodes","services","deployments"]  
  # 对资源的操作方法.
  verbs: ["get", "watch", "list"]  

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: koten-to-linux-role-reader
  namespace: default
subjects:
  # 主体类型
- kind: Group
  # 用户名
  name: koten  
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # 角色类型
  kind: Role  
  # 绑定角色名称
  name: linux-role-reader
  apiGroup: rbac.authorization.k8s.io

[root@Master231 group]# kubectl apply -f rbac.yaml 

4、验证权限

[root@Master231 group]# kubectl get pods --kubeconfig=koten-linux.kubeconfig 
NAME        READY   STATUS    RESTARTS   AGE
linux-web   1/1     Running   0          37s
[root@Master231 group]# kubectl delete pods --all --kubeconfig=koten-linux.kubeconfig
Error from server (Forbidden): pods "linux-web" is forbidden: User "linux" cannot delete resource "pods" in API group "" in the namespace "default"
# 这个错误提示是因为用户 "linux" 没有在 "default" 命名空间中删除 "pods" 资源的权限。

2、创建用户加入用户组案例展示

创建一个kotenuser用户,将其加入koten组,并验证权限,全程只需要修改json文件的用户即可

1、使用K8s ca签发客户端证书

编写证书请求

cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}
EOF

cat > koten-csr.json <<EOF
{
  "CN": "kotenuser",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "koten",
      "OU": "System"
    }
  ]
}
EOF

[root@Master231 kotenuser]# ls
ca-config.json  koten-csr.json

生成证书

cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes koten-csr.json | cfssljson -bare koten-groups

2、生成kubeconfig授权文件

编写生成kubeconfig文件的脚本

cat > kubeconfig.sh <<'EOF'
kubectl config set-cluster koten-linux-groups \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --embed-certs=true \
  --server=https://10.0.0.231:6443 \
  --kubeconfig=koten-linux.kubeconfig
 
# 设置客户端认证
kubectl config set-credentials koten \
  --client-key=koten-groups-key.pem \
  --client-certificate=koten-groups.pem \
  --embed-certs=true \
  --kubeconfig=koten-linux.kubeconfig

# 设置默认上下文
kubectl config set-context linux-groups \
  --cluster=koten-linux-groups \
  --user=koten \
  --kubeconfig=koten-linux.kubeconfig

# 设置当前使用的上下文
kubectl config use-context linux-groups --kubeconfig=koten-linux.kubeconfig
EOF

生成kubeconfig文件

[root@Master231 kotenuser]# bash kubeconfig.sh
Cluster "koten-linux-groups" set.
User "koten" set.
Context "linux-groups" created.
Switched to context "linux-groups".

3、直接验证,无需给kotenuser授权,因为其加入了koten组,该组是有权限的!

[root@Master231 kotenuser]# kubectl get pods --kubeconfig=koten-linux.kubeconfig 
NAME        READY   STATUS    RESTARTS   AGE
linux-web   1/1     Running   0          10m

[root@Master231 kotenuser]# kubectl delete pods linux-web --kubeconfig=koten-linux.kubeconfig
Error from server (Forbidden): pods "linux-web" is forbidden: User "kotenuser" cannot delete resource "pods" in API group "" in the namespace "default

# 提示用户kotenuser没有删除default名称空间下linux-web的权限

三、RBAC基于服务账号

RBAC(Role-Based Access Control)基于服务账号是 Kubernetes 群集中一种常用的授权方式。在 Kubernetes 中,服务账号是一种用于身份验证和授权的对象,类似于 Service Account。服务账号能够为 Pod 提供身份验证和授权,以便 Pod 可以访问其需要的 Kubernetes API 资源。

1、应用场景

1、保护敏感数据:通过为访问敏感数据的 Pod 分配不同的服务账号和角色,可以实现细粒度的访问控制,以保护敏感数据不被未经授权的 Pod 访问。
2、实现多租户架构:通过为不同租户的 Pod 分配不同的服务账号和角色,可以实现多租户架构,使不同租户的 Pod 只能访问属于自己的 Kubernetes API 资源。
3、简化管理:通过为不同的应用程序分配不同的服务账号和角色,可以简化管理操作,使管理员只需要管理少量的角色和服务账号,而不需要为每个 Pod 分配具体的访问权限。
4、提高安全性:通过基于服务账号的 RBAC 授权,可以提高 Kubernetes 群集的安全性,避免未经授权的访问和操作,保护 Kubernetes 群集和应用程序的安全。

2、创建方式

Service Account一般用于程序的用户名

响应式创建

[root@Master231 kotenuser]# kubectl create serviceaccount koten-linux
serviceaccount/koten-linux created
[root@Master231 kotenuser]# kubectl get sa
NAME          SECRETS   AGE
default       1         10d
koten-linux   1         20s
[root@Master231 kotenuser]# kubectl delete sa koten-linux 
serviceaccount "koten-linux" deleted
[root@Master231 kotenuser]# kubectl get sa
NAME      SECRETS   AGE
default   1         10d

声明式创建

[root@Master231 serviceaccounts]# cat 01-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: koten-linux
  namespace: default
[root@Master231 serviceaccounts]# kubectl apply -f 01-sa.yaml
serviceaccount/koten-linux created
[root@Master231 serviceaccounts]# kubectl get sa
NAME          SECRETS   AGE
default       1         10d
koten-linux   1         5s

3、授权容器中的Python程序对K8s API访问权限案例

授权容器中的Python程序对K8s API访问权限步骤

1、创建Role

2、创建ServiceAccount

3、将ServiceAccount于Role绑定

4、为Pod指定自定义的ServiceAccount

5、进入容器执行Python程序测试操作K8s API权限

4、基于服务账号授权案例

[root@Master231 serviceaccounts]# cat 01-sa-rbac.yaml
apiVersion: v1
kind: ServiceAccount 
metadata:
  name: koten-python 
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: koten-pod-reader 
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
#- apiGroups: ["apps"]
#  resources: ["deployments"]
#  verbs: ["get", "watch", "list"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: koten-sa-to-role
subjects:
- kind: ServiceAccount 
  name: koten-python
roleRef:
  kind: Role
  name: koten-pod-reader
  apiGroup: rbac.authorization.k8s.io

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: koten-python3-sa
spec:
  replicas: 2
  selector:
    matchExpressions:
    - key: apps
      values: 
      - "python"
      operator: In
  template:
    metadata:
      labels:
         apps: python
    spec:
      # 指定sa的名称,请确认该账号是有权限访问K8S集群的哟!
      serviceAccountName: koten-python
      containers:
      - image: harbor.koten.com/koten-tools/python:3.9.16-alpine3.16
        name: c1
        command:
        - tail 
        - -f
        - /etc/hosts

[root@Master231 serviceaccounts]# kubectl apply -f 01-sa-rbac.yaml 
serviceaccount/koten-python created
role.rbac.authorization.k8s.io/koten-pod-reader created
rolebinding.rbac.authorization.k8s.io/koten-sa-to-role created
deployment.apps/koten-python3-sa created

编写Python程序,进入Python Pod所在容器执行以下Python代码即可

[root@Master231 serviceaccounts]# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
koten-python3-sa-7678bc45d4-gqpbq   1/1     Running   0          36s
koten-python3-sa-7678bc45d4-nk9xc   1/1     Running   0          36s
[root@Master231 serviceaccounts]# kubectl exec -it koten-python3-sa-7678bc45d4-gqpbq -- sh
/ # pip install kubernetes -i https://pypi.tuna.tsinghua.edu.cn/si    #安装python程序依赖的软件包并测试
mple/
/ # cat > view-k8s.py <<'EOF'
from kubernetes import client, config

with open('/var/run/secrets/kubernetes.io/serviceaccount/token') as f:
     token = f.read()

configuration = client.Configuration()
configuration.host = "https://kubernetes"  # APISERVER地址
configuration.ssl_ca_cert="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"  # CA证书 
configuration.verify_ssl = True   # 启用证书验证
configuration.api_key = {"authorization": "Bearer " + token}  # 指定Token字符串
client.Configuration.set_default(configuration)
apps_api = client.AppsV1Api() 
core_api = client.CoreV1Api() 
try:
  print("###### Deployment列表 ######")
  # 列出default命名空间所有deployment名称
  for dp in apps_api.list_namespaced_deployment("default").items:
    print(dp.metadata.name)
except:
  print("没有权限访问Deployment资源!")

try:
  # 列出default命名空间所有pod名称
  print("###### Pod列表 ######")
  for po in core_api.list_namespaced_pod("default").items:
    print(po.metadata.name)
except:
  print("没有权限访问Pod资源!")
EOF
###### Deployment列表 ######
没有权限访问Deployment资源!
###### Pod列表 ######
koten-python3-sa-7678bc45d4-gqpbq
koten-python3-sa-7678bc45d4-nk9xc
/ # 
[root@Master231 serviceaccounts]# 

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python使用tkinter库设置背景图片、label显示位置和label设置显示图片

tkinter 设置背景图片 label显示位置 label设置显示图片 from tkinter import * import tkinter as tk from PIL import ImageTk from PIL import Imagedef get_img(filename, width, height):im Image.open(filename).resize((width, height))im ImageTk.PhotoImage(im)…

Java的集合框架总结

Map接口和Collection接口是所有集合框架的父接口&#xff1a; Collection接口的子接口包括&#xff1a;Set接口和List接口 Map接口的实现类主要有&#xff1a;HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有&#xff1a;HashSet、Tr…

【CH32V305FBP6】USBD HS 描述符修改

文章目录 前言设备描述符完整描述符配置描述符CDC 描述符接口关联描述符接口描述符功能描述符端点描述符接口描述符端点描述符 HID 描述符接口描述符 新增一个 HID 设备 前言 USB HS 复合设备&#xff0c;CDCHID 功能&#xff1a;串口、DAP、CAN-HID、RS485 设备描述符 htt…

远程抄表系统方案

一、远程抄表系统简述 远程抄表系统&#xff0c;是一种智能化的自动化数据收集技术性&#xff0c;主要运用于电力工程、供水公司、天然气等公共服务行业&#xff0c;完成对消费者表计数据的远程、即时、智能采集。这类系统不但降低了成本&#xff0c;降低了人力抄表错误&#…

手部出现这4种症状,可能是糖尿病先兆!务必及时监测血糖

糖尿病来袭&#xff0c;手部或先知&#xff01;出现这 4 种症状&#xff0c;务必尽快监测血糖 第一&#xff0c;手指麻木感明显&#xff0c;当持续性的高血糖损害手部血管与神经末梢时&#xff0c;便会导致手指产生麻木以及刺痛之感。而且随着血糖不断升高&#xff0c;受损的血…

Soildworks学习笔记(一)

1.如何添加M3,M4等螺丝孔&#xff1a; 有时候异形孔向导显示灰色是因为没有退出草图选项卡&#xff0c;选择异形孔向导就可以进行异形孔的设定和放置&#xff1a; solidwork放置螺丝孔以及显示螺纹的问题_.16-m3 solidwork-CSDN博客 2.如何修剪线条&#xff1a; 如何倒圆角或…

Hack The Box-Blurry

总体思路 CVE-2024-24590->修改脚本/劫持python库 信息收集&端口利用 nmap -sSVC blurry.htbStarting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-10 21:40 EDT Nmap scan report for app.blurry.htb (10.10.11.19) Host is up (0.20s latency).PORT STATE S…

网络仿真方法综述

目录 1. 引言 2.仿真器介绍 2.1 NS-2 2.2 NS-3 2.3 OPNET 2.4 GNS3 3.仿真对比 4.结论 参考文献 1. 引言 网络仿真是指使用计算机模拟网络系统的行为和性能的过程。在网络仿真中&#xff0c;可以建立一个虚拟的网络环境&#xff0c;并通过模拟各种网络设备、协议和应用程…

Java 的循环

Java 有三种循环&#xff1a;for&#xff0c;while&#xff0c;do while。 for 基本语法&#xff1a; for (循环变量初始化; 循环条件; 循环变量迭代){循环语句; }程序示例&#xff1a; public static void main(String[] args) {for (int i 0, j 0; i < 3; i, j--) {…

大神出新品,吴恩达开源机器翻译智能体项目

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Clion控制台打印中文乱码

第一步 第二步 第三步 ctrlaltshift/ 把run.processes,with.pty

教育小程序开发:技术实现与实践案例

随着信息技术的不断进步&#xff0c;教育小程序在教育领域的应用越来越广泛。教育小程序开发不仅可以提高教学效率&#xff0c;还能够提供个性化的学习体验。本文将以技术代码为例&#xff0c;详细介绍教育小程序开发的关键技术和实践案例&#xff0c;帮助开发者更好地理解和实…

小公司要求真高

大家好&#xff0c;我是白露啊。 最近看到一个爽文帖&#xff0c;标题就是——“小公司要求真高”。 事情是这样的&#xff0c;一家的小公司在拿到简历之后&#xff0c;HR直接对楼主说&#xff1a;“你不合适&#xff0c;简历不行。” 言外之意就是嫌弃简历单薄&#xff0c;看…

IntelliJ IDEA 2024.1最新安装 亲测有效2099年

标题一&#xff1a;IDEA官方下载 ①如题&#xff0c;先到IDEA官方下载&#xff0c;简简单单 ②IDEA官方&#xff1a;IntelliJ IDEA – the Leading Java and Kotlin IDE 标题二&#xff1a;获取脚本 点这里获取 &#x1f31f;获取完后压缩&#xff0c;推荐与IDEA放在同一目…

白酒:茅台镇白酒的地域特色菜肴与搭配建议

在中国的美食文化中&#xff0c;酒与菜一直是密不可分的。茅台镇作为中国白酒的发源地&#xff0c;其白酒与地域特色菜肴的搭配更是有着深厚的历史底蕴。云仓酒庄作为茅台镇的知名酒庄&#xff0c;其豪迈白酒与当地特色菜肴的搭配&#xff0c;更是让人回味无穷。 茅台镇的菜肴以…

delmia中机器人末端固定工具

1 需要在工具上面建立点 在Device Building模式下 2 然后通过 set tool可以设置

Shell脚本 if语句

条件测试&#xff1a; $? 返回码 判断命令或者脚本是否执行成功&#xff08;最近的一条&#xff09; 0 true 为真就是成功 成立 非0 false 失败或者异常 test命令 可以进行条件测试 然后根据的是返回值来判断条件是否成立。 -e 测试目录或者文件是否存在 exist -d 测试…

宝兰德受邀出席第八届丝绸之路网络安全论坛

近日&#xff0c;2024第八届丝绸之路网络安全论坛在陕西宾馆会议中心成功举办&#xff0c;本次论坛以“汇聚万千智慧 夯实安全堤坝”为主题&#xff0c;由主论坛及密码技术与密评、教育行业网络安全、卫健行业网络安全三个平行分论坛组成&#xff0c;论坛邀请业内专家学者、企业…

MyBatisPlus代码生成器(交互式)快速指南

引言 本片文章是对代码生成器(交互)快速配置使用流程&#xff0c;更多配置方法可查看官方文档&#xff1a; 代码生成器配置官网 如有疑问欢迎评论区交流&#xff01; 文章目录 引言演示效果图引入相关依赖创建代码生成器对象引入Freemarker模板引擎依赖支持的模板引擎 MyBat…

HBase中Master初始化错误~

ERROR&#xff1a;org.apache.hadoop.hbase.PleaseHoldException:Master is initializing 1、停止HBase运行 2、启动zookeeper中的zkCli.sh服务 ./zookeeper/bin/zkCli.sh 3、执行完毕显示以下结果,删除habse文件夹 4、重新启动HBase即可。