Kubernetes从零到精通(15-安全)
目录
一、Kubernetes API访问控制
1.传输安全(Transport Security)
2.认证(Authentication)
2.1 认证方式
2.2 ServiceAccount和普通用户的区别
2.3 ServiceAccount管理方式
自动ServiceAccount示例
手动ServiceAccount示例
3.鉴权 (Authorization)
3.1鉴权方式
3.2 RBAC
4.准入控制 (Admission Control)
PodSecurity
安全级别
安全实施
配置示例
二、审计 (Auditing)
审计架构
审计策略(Audit Policy)
审计级别
审计策略文件示例
审计日志的存储(Audit Sink)
审计事件结构
三、Secret
四、网络策略(NetworkPolicy)
网络策略的作用
网络策略的工作原理
网络策略示例
Kubernetes(K8s)是一个强大的容器编排平台,安全性至关重要。Kubernetes的安全机制可以分为多个层次,包括集群层、网络层、应用层等。以下是Kubernetes中主要的安全机制:Kubernetes API访问控制、Secret、网络策略(NetworkPolicy) 、审计日志等等。
一、Kubernetes API访问控制
Kubernetes API访问控制是一组机制,确保只有经过授权的用户或服务可以访问和操作集群资源。它涵盖了多个层面,包括传输安全、认证、鉴权、准入控制和审计。以下是这些概念的详细介绍。
1.传输安全(Transport Security)
Kubernetes默认使用HTTPS来确保API通信的安全性,防止数据在传输过程中被窃取或篡改。API服务器会使用TLS(传输层安全协议)对请求进行加密:
客户端与服务器间通信加密:通过使用TLS证书来验证服务器和客户端的身份,从而加密通信。
Kubernetes API server的证书管理:需要为Kubernetes集群中的API服务器配置正确的证书(包括根证书和客户端证书)。
保护内部组件的通信:比如etcd的通信需要加密,并使用适当的证书。
2.认证(Authentication)
2.1 认证方式
所有Kubernetes集群都有两类用户:由Kubernetes管理的服务账户(ServiceAccount)、普通用户。所有API请求都需要经过身份认证,以确保请求来自合法用户或服务,并授予适当的权限。Kubernetes支持多种认证方式,其中比较常见的是基于令牌的身份验证、x509证书、OpenID Connect(OIDC)、服务账户(ServiceAccount)等。
x509证书:用户通过x509证书与API服务器进行通信。这种方式通常用于Kubernetes管理员、集群节点和集群内的一些服务。例如:客户端使用带有用户身份的证书,通过kubectl命令访问API服务器。
Bearer Token:Kubernetes使用令牌(Token)进行身份验证,客户端可以通过将Bearer Token附加到HTTP请求中进行身份验证。
OIDC(OpenID Connect):通过外部身份提供者(如Google、AWS、Keycloak等)验证用户身份。OIDC是一种基于OAuth2.0协议的身份验证协议,适合于与外部认证服务集成。
服务账户(ServiceAccount):服务账户用于集群内的应用程序或Pod来访问API服务器,通常与RBAC(基于角色的访问控制)结合使用。
可以指定多个认证模块,在这种情况下,服务器依次尝试每个验证模块,直到其中一个成功。
2.2 ServiceAccount和普通用户的区别
普通用户通常是指通过kubeconfig文件、证书或OIDC等方式认证的用户,通常是Kubernetes集群的管理员或开发者;Kubernetes不会直接在集群中创建或管理普通用户。
普通用户使用场景:普通用户用于手动管理集群资源(例如 kubectl 命令行工具)或访问Kubernetes API。
ServiceAccount是Kubernetes中的一种特殊类型的账户,用于赋予Pod在集群中运行时的身份。它主要用于集群内的自动化服务,而不是手动用户操作。
ServiceAccount使用场景:ServiceAccount常用于需要与API服务器交互的应用程序,或用于Pod自动管理集群资源。例如CI/CD工具、监控工具、控制器等。
2.3 ServiceAccount管理方式
每个ServiceAccount都与一个JSON Web Token (JWT) 关联,该令牌存储在Pod的文件系统中,位于 /var/run/secrets/kubernetes.io/serviceaccount/token路径下。Pod启动后,会使用这个令牌与Kubernetes API服务器进行通信,API服务器根据该令牌进行身份验证。ServiceAccount通常与RBAC结合,授予Pod访问某些API资源的权限。
ServiceAccount可以通过自动或手动方式使用。默认情况下,每个命名空间Namespace都有一个默认的ServiceAccount,Pod启动时会自动关联这个ServiceAccount。如果需要更高的权限或特殊用途,我们也可以手动创建并指定ServiceAccount。
自动ServiceAccount示例
创建及查看Pod:
#创建Pod
kubectl run my-pod --image=nginx
#查看Pod的ServiceAccount
kubectl get pod my-pod -o yaml
在输出中,会看到以下部分,表示该Pod使用了default
ServiceAccount:
serviceAccount: default
serviceAccountName: default
查看ServiceAccount令牌:
kubectl exec -it my-pod -- cat /var/run/secrets/kubernetes.io/serviceaccount/token
手动ServiceAccount示例
创建ServiceAccount:
#手动创建一个新的ServiceAccount
kubectl create serviceaccount my-service-account
#查看ServiceAccount的详细信息kubectl get serviceaccount my-service-account -o yaml
创建Pod并绑定自定义的ServiceAccount:
apiVersion: v1
kind: Pod
metadata:name: my-pod-with-sa
spec:serviceAccountName: my-service-account # 指定使用的ServiceAccountcontainers:- name: my-containerimage: nginx
验证Pod是否绑定了自定义ServiceAccount:
#创建Pod
kubectl apply -f pod-with-sa.yaml
#查看该 Pod 的详细信息kubectl get pod my-pod-with-sa -o yaml
输出中会显示:
serviceAccount: my-service-account
serviceAccountName: my-service-account
为ServiceAccount配置权限(可选):
#授予
my-service-account
读取Pod信息的权限。kubectl create role my-role --verb=get,list,watch --resource=pods
kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:my-service-account
ServiceAccount 默认没有太多权限,可以使用Role
和RoleBinding
为它配置权限。
关于权限在鉴权 (Authorization)部分说明。
3.鉴权 (Authorization)
3.1鉴权方式
在认证之后,Kubernetes会决定认证通过的用户是否有权限执行特定操作。Kubernetes使用多种授权方式来控制API请求的访问权限。
RBAC (基于角色的访问控制):基于预定义的角色来授予用户或组的权限,通过Role和ClusterRole结合RoleBinding和ClusterRoleBinding来实施访问控制。
ABAC (基于属性的访问控制):通过指定策略文件,根据请求的属性(如用户名、资源类型、动作)决定是否授权。
Webhook模式:将鉴权请求转发到外部服务处理,适合实现自定义的访问控制逻辑。
3.2 RBAC
RBAC(Role-Based Access Control,基于角色的访问控制)是Kubernetes中的一种访问控制机制,用于定义用户或服务账号对 Kubernetes 资源的访问权限。通过 RBAC,集群管理员可以根据角色分配权限,并通过绑定这些角色给用户、组或ServiceAccount来控制访问权限。
RBAC 主要由四个核心组件构成:
- Role:定义某个特定
Namespace
下的权限。它包含了对资源(例如Pods、Services等)的操作规则(如get
、create
、delete
等)。 - ClusterRole:定义集群范围的权限,可以在所有
Namespace
中使用,或直接应用于集群级资源(如节点、PersistentVolumes等)。 - RoleBinding:将
Role
绑定到用户、组或ServiceAccount,使其在指定的Namespace
中拥有相应的权限。 - ClusterRoleBinding:将
ClusterRole
绑定到用户、组或ServiceAccount,使其在整个集群中拥有相应的权限。
Role & RoleBinding示例:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: default #作用范围是default命名空间name: pod-reader
rules:
- apiGroups: [""] #空字符串表示核心API组resources: ["pods"]verbs: ["get", "list", "watch"] #授予的操作权限
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-podsnamespace: default
subjects: #绑定的用户或服务账户
- kind: User #可以是User、Group或ServiceAccountname: "example-user" #用户名apiGroup: rbac.authorization.k8s.io
roleRef:kind: Role #绑定的角色类型name: pod-reader #绑定的角色名称apiGroup: rbac.authorization.k8s.io
example-user
现在拥有default
命名空间中读取pods
资源的权限。
ClusterRole & ClusterRoleBinding示例:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: cluster-pod-reader
rules:
- apiGroups: [""] # 核心API组resources: ["pods"]verbs: ["get", "list", "watch"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: read-pods-clusterwide
subjects: #绑定的用户或服务账户
- kind: Username: "example-user" #用户名apiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRole #绑定ClusterRolename: cluster-pod-reader #绑定的角色名称apiGroup: rbac.authorization.k8s.io
ci-service-account
现在可以读取集群中所有命名空间的Pod信息。
4.准入控制 (Admission Control)
准入控制是对经过认证和授权的API请求进行进一步的检查和修改的一个步骤。在请求进入Kubernetes API Server之前,准入控制器可以阻止请求或修改对象。推荐使用的准入控制器默认情况下都处于启用状态。可以使用--enable-admission-plugins来启用默认设置以外的其他准入控制器。
常见的内置准入控制器:例如NamespaceLifecycle、LimitRanger、PodSecurity、RuntimeClass等,用于特定的访问和资源管理。以下介绍PodSecurity概念:
PodSecurity
Pod 安全性标准(Pod Security Standards,PSS)是Kubernetes提供的一套安全标准,用于定义和管理Pod 的安全策略。通过使用Pod安全性标准,Kubernetes集群管理员可以控制和限制 Pod在运行时的行为,从而提高集群的整体安全性。这套标准是通过Kubernetes的内置准入控制器PodSecurity来实现的。
默认情况下,Kubernetes不启用PodSecurity,因此没有默认的安全级别和模式。如果启用PodSecurity准入控制器,默认的安全级别和模式需要手动配置。
安全级别
Pod 安全性标准主要定义了三个安全级别(或模式):
-
特权级别(Privileged)
- 用途:最宽松的安全级别,允许Pod以完全特权运行。适用于那些需要完全控制底层主机的Pod,例如需要执行主机级别操作的系统组件或Pod。
- 特点:
- 允许使用特权模式、HostPath挂载、特权容器、HostNetwork等功能。
- 几乎没有安全约束,风险较高。
-
基线级别(Baseline)
- 用途:旨在允许大多数应用程序正常运行,同时施加基本的安全限制。适合一般的应用程序。
- 特点:
- 拒绝特权模式和特权容器。
- 限制HostPath挂载,防止容器访问主机的敏感文件。
- 限制某些Linux特性,如
CAP_SYS_ADMIN
等高危特权。 - 禁止使用
HostNetwork
和HostPID
。
-
受限级别(Restricted)
- 用途:最严格的安全级别,施加了所有可用的最佳安全实践。适用于高度敏感的应用程序,需要严格限制Pod的行为。
- 特点:
- 禁止一切特权操作,包括HostPath挂载、特权容器、HostNetwork、HostPID、HostIPC等。
- 强制限制容器的用户权限(如不能以root用户身份运行容器)。
- 强制限制进程和文件系统的权限,最大限度减少攻击面。
安全实施
Pod 安全性标准的实施分为以下几种操作模式:
- Enforce(执行):强制执行指定的安全策略,如果Pod不符合要求,则禁止其创建或更新。
- Audit(审计):记录违反安全策略的操作,但不阻止Pod创建或更新。
- Warn(警告):向用户发出警告,通知其违反了安全策略,但不阻止Pod创建或更新。
这些模式允许管理员以递进方式加强安全控制,逐步引导开发人员适应更严格的安全标准。
配置示例
apiVersion: v1
kind: Namespace
metadata:name: restricted-namespacelabels:pod-security.kubernetes.io/enforce: "restricted" #强制执行受限级别pod-security.kubernetes.io/audit: "baseline" #审计基线级别pod-security.kubernetes.io/warn: "baseline" #警告基线级别
在这个示例中,restricted-namespace
命名空间中,强制执行受限级别的Pod安全策略,并在审计和警告模式下评估基线级别的策略。
apiVersion: v1
kind: Namespace
metadata:name: baseline-namespacelabels:pod-security.kubernetes.io/enforce: "baseline" #强制执行基线级别
在这个示例中,baseline-namespace
命名空间中,所有创建的Pod必须符合基线级别的安全标准,否则创建或更新请求将被拒绝。
二、审计 (Auditing)
Kubernetes 审计日志会记录API服务器处理的每一个HTTP请求,它包括从请求的接收到最终的处理结果(允许或拒绝),以及返回的响应。审计的事件按照发生的顺序记录下来,管理员可以根据这些日志了解集群的操作情况。
Kubernetes 默认没有开启审计,需要在kube-apiserver
的配置文件中启用审计功能,并手动配置审计策略文件。API 服务器不默认生成审计日志,也没有预设的审计级别。
审计架构
审计系统由三个主要组件组成:
- Audit Policy:定义审计事件的记录规则,如记录哪些操作、哪些用户的行为等。
- Audit Sink:审计日志的存储位置,可以是文件、标准输出,或通过HTTP Webhook发送到外部服务。
- Audit Event:每个 API 请求会被记录为一个审计事件,包含详细的上下文信息。
审计策略(Audit Policy)
审计策略通过一个策略文件来定义,策略文件控制什么样的API请求会被记录,以及记录的详细程度。
审计级别
每个请求可以按不同的审计级别记录:
- None:不记录任何内容。
- Metadata:仅记录请求的元数据(如用户、操作、时间等),不记录请求和响应的内容。
- Request:记录请求的元数据以及请求体,但不记录响应体。
- RequestResponse:记录请求的元数据、请求体和响应体,包含了所有详细信息。
审计策略文件示例
一个典型的审计策略文件会定义不同资源、不同用户和操作的记录级别。下面是一个示例策略文件:
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: RequestResponse # 对于所有的pod操作,记录请求和响应resources:- group: ""resources: ["pods"]
- level: Metadata #对于所有的secrets操作,记录元数据resources:- group: ""resources: ["secrets"]
- level: None #忽略对serviceaccounts的请求resources:- group: ""resources: ["serviceaccounts"]
- level: Request #记录所有的请求操作和元数据users: ["system:serviceaccount:kube-system:default"]verbs: ["create", "update", "patch"]
- level: Metadata #默认记录所有其他请求的元数据omitStages:- "RequestReceived"
这个策略文件的规则说明如下:
- 对于所有的Pod操作,记录详细的请求和响应。
- 对于 Secret 操作,仅记录元数据(例如操作的时间、用户)。
- 忽略ServiceAccount的所有操作。
- 对特定的服务账户的
create
、update
、patch
请求,记录请求的详细信息。 - 对所有其他请求,默认记录元数据。
审计日志的存储(Audit Sink)
Kubernetes 支持多种审计日志的输出方式,通常包括:
- 文件输出:将审计日志写入文件。
- Webhook 输出:通过HTTP POST请求将审计日志发送到外部服务。
文件输出是一种常见的方式,API服务器可以将审计日志写入到指定文件。 启动kube-apiserver
时,可以通过以下参数配置文件输出:、
kube-apiserver \
--audit-policy-file=/etc/kubernetes/audit-policy.yaml \
--audit-log-path=/var/log/kubernetes/audit.log \
--audit-log-maxage=30 \
--audit-log-maxbackup=10 \
--audit-log-maxsize=100
--audit-policy-file
:指定审计策略文件路径。--audit-log-path
:审计日志文件的存储路径。--audit-log-maxage
:日志文件保存的最大天数。--audit-log-maxbackup
:保留的旧审计日志文件的最大数量。--audit-log-maxsize
:每个日志文件的最大大小(以 MB 为单位)。
审计事件结构
审计日志中的每个事件都包含丰富的上下文信息,在下面的输出示例中,requestObject
和 responseObject
分别记录了请求和响应的详细内容:
{"kind": "Event","apiVersion": "audit.k8s.io/v1","level": "RequestResponse","stage": "ResponseComplete","requestURI": "/api/v1/namespaces/default/pods","verb": "create","user": {"username": "admin","groups": ["system:masters"]},"sourceIPs": ["192.168.1.100"],"objectRef": {"resource": "pods","namespace": "default","name": "my-pod"},"responseStatus": {"metadata": {},"code": 201},"requestObject": {"kind": "Pod","metadata": {"name": "my-pod"},"spec": {"containers": [{"name": "nginx","image": "nginx:latest"}]}},"responseObject": {"kind": "Pod","metadata": {"name": "my-pod"},"spec": {"containers": [{"name": "nginx","image": "nginx:latest"}]}}
}
三、Secret
Secret API为需要保密的配置值提供基本保护。可以回顾 Kubernetes从零到精通(13-Configmap、Secret)
四、网络策略(NetworkPolicy)
Kubernetes 中的网络策略(NetworkPolicy) 是一种控制Pod间流量和Pod与外部网络流量的安全机制。它允许用户定义哪些流量可以进入和离开Pod,以确保集群的安全性。
网络策略仅会在支持网络策略的网络插件CNI(如 Calico)中生效。Kubernetes 默认的网络实现不支持网络策略。网络插件可以回顾Kubernetes从零到精通(11-CNI网络插件)。
网络策略的作用
NetworkPolicy是通过定义一组规则来允许或拒绝指定Pod的网络流量。这些规则可以基于:
- 命名空间:限制特定命名空间中的 Pod 间的流量。
- Pod 标签:限制带有特定标签的 Pod 间的流量。
- IP Block:限制特定的 IP 地址段的流量。
网络策略的工作原理
Kubernetes 网络策略主要用来定义:
- 入口流量(Ingress):进入Pod的流量。
- 出口流量(Egress):从Pod发送出的流量。
没有配置网络策略时,所有Pod之间的网络流量默认是允许的,一旦定义了网络策略,只有符合规则的流量才会被允许。
网络策略的基本结构
一个网络策略通过以下几部分定义:
- Pod选择器:选择哪些 Pod 应该应用这条策略。
- 策略类型:
Ingress(不是Ingress、Gateway api,只是名称相同)
或Egress
,指定策略是控制入口流量还是出口流量。 - 规则:指定允许哪些流量通过,规则可以基于Pod标签、IP 地址块、命名空间等定义。
网络策略示例
下面的网络策略将阻止所有流向my-pod
的流量,除了带有特定标签的Pod发送的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-specific-podsnamespace: default
spec:podSelector:matchLabels:app: my-pod #应用此策略的PodpolicyTypes:- Ingress #定义入口流量规则ingress:- from:- podSelector:matchLabels:app: allowed-app #允许带有此标签的Pod发送流量
该策略允许来自特定IP地址段(如192.168.0.0/16)的流量,其他流量会被拒绝:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-ip-rangenamespace: default
spec:podSelector:matchLabels:app: my-pod #应用此策略的PodpolicyTypes:- Ingressingress:- from:- ipBlock:cidr: 192.168.0.0/16 #允许的IP地址范围
下面的网络策略允许Pod访问外部网络(注意这里只是在策略上允许访问外部网络,底层网络能不能支持该Pod访问外部网络,需要看具体网络情况),但限制对特定命名空间内其他 Pod 的访问:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-egressnamespace: default
spec:podSelector:matchLabels:app: my-apppolicyTypes:- Egress #定义出口流量规则egress:- to:- ipBlock:cidr: 0.0.0.0/0 #允许Pod访问外部网络
该策略将完全隔离某个Pod的网络流量,既不允许它接收流量,也不允许它发送流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-allnamespace: default
spec:podSelector:matchLabels:app: isolated-pod #目标PodpolicyTypes:- Ingress #不允许任何流量进入- Egress #不允许任何流量离开
相关文章:
Kubernetes从零到精通(15-安全)
目录 一、Kubernetes API访问控制 1.传输安全(Transport Security) 2.认证(Authentication) 2.1 认证方式 2.2 ServiceAccount和普通用户的区别 2.3 ServiceAccount管理方式 自动ServiceAccount示例 手动ServiceAccount示例 3.鉴权 (Authorization) 3.1鉴权方式 3.2 …...
《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版
推荐:《算法竞赛》,算法竞赛大全书,网购:京东 天猫 当当 文章目录 《蓝桥杯算法入门》内容简介本书读者对象作者简介联系与交流《蓝桥杯算法入门 C/C》版目录 《蓝桥杯算法入门 Java》版目录 《蓝桥杯算法入门 Python》版目录 …...
Soar项目中添加一条新的SQL审核规则示例
soar是一个开源的SQL规则审核工具,是一个go语言项目,可以直接编译构建成一个可执行程序,而且是一个命令行工具,我们可以利用archey来调用soar进行sql规则审核以及sql的分析,包括执行计划的查看及sql建议等。 soar中已…...
RISC-V开发 linux下GCC编译自定义指令流程笔记
第一步:利用GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言 第二步:利用RSIC-V的中的.insn模板进行自定义指令的插入 第三步:RISC-V开发环境的搭建 C语言插入汇编 GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言语句方便了…...
java代码是如何与数据库通信的?
Java代码与数据库通信的过程主要通过Java Database Connectivity(JDBC)来实现。JDBC是Java与数据库之间的标准接口,提供了用于执行SQL语句和处理数据库结果的API。以下是Java代码与数据库通信的详细步骤: 一、导入JDBC库 在Java…...
gateway--网关
在微服务架构中,Gateway(网关)是一个至关重要的组件,它扮演着多种关键角色,包括路由、负载均衡、安全控制、监控和日志记录等。 Gateway网关的作用 统一访问入口: Gateway作为微服务的统一入口,…...
北京数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂
随着北京数字孪生工业互联网可视化技术的深入应用,新型工业化智能制造工厂正逐步迈向智能化、高效化的全新阶段。这项技术不仅实现了物理工厂与数字世界的精准映射,更通过大数据分析、人工智能算法等先进手段,为生产流程优化、资源配置合理化…...
土地规划与区域经济发展:筑基均衡未来的战略经纬
在新时代背景下,土地规划不仅是空间布局的艺术,更是推动区域经济均衡发展的关键引擎。土地资源的合理配置对于激发区域潜能、促进经济结构优化有着重要意义。本文将深入剖析土地规划如何成为促进区域经济均衡发展的强大动力。 一、土地规划与区域经济的…...
wsl(2) -- ubuntu24.04配置
1. 常用脚本及别名配置 修改的文件内容参考另一篇文章常用bash脚本。 修改~/.bashrc,在文件末尾追加以下内容。 # Add by user export MYTOOLS$HOME/tools export MYBINS$HOME/bin # 系统中其他地方已经添加过了,暂不清楚是哪里添加的 #export PATH$M…...
python快速搭建https服务器
本文介绍了在ubuntu操作系统上搭建https服务器的过程 在一台连接到网络的主机上搭建https服务器,假设该主机的ip地址为:10.98.69.174 创建证书example.crt和私钥example.key openssl req -newkey rsa:2048 -nodes -keyout example.key -x509 -days 365…...
网络原理3-应用层(HTTP/HTTPS)
目录 DNSHTTP/HTTPSHTTP协议报文HTTP的方法请求报头、响应报头(header)状态码构造HTTP请求HTTPS 应用层是我们日常开发中最常用的一层,因为其他层:传输层、网络层、数据链路层、物理层这些都是操作系统和硬件、驱动已经实现好的,我们只能使用…...
JVM(HotSpot):堆空间(Heap)以及常用相关工具介绍
文章目录 一、内存结构图二、堆的定义三、堆内存溢出四、堆内存排查工具 一、内存结构图 二、堆的定义 1、通过new关键字创建的对象,都会放到堆空间中。 2、它是线程共享的,堆中的对象都要考虑线程安全问题。 那有同学肯定会问,方法内通过n…...
【Python语言初识(六)】
一、网络编程入门 1.1、TCP/IP模型 实现网络通信的基础是网络通信协议,这些协议通常是由互联网工程任务组 (IETF)制定的。所谓“协议”就是通信计算机双方必须共同遵从的一组约定,例如怎样建立连接、怎样互相识别等,…...
使用root账号ssh登录虚拟机ubuntu
在C:\Users\Administrator\.ssh目录下的config中,添加ubuntu会在根目录中,建立一个root文件夹。在该文件夹中建一个.ssh目录。像免密登录ubuntu设置中,把公钥考进去。在vscode中打开文件夹中选择要打开的文件夹,就可以不需要在ubu…...
五子棋双人对战项目(1)——WebSocket介绍
目录 一、项目介绍 如何实现实时同步对局? 二、WebSocket 1、什么是WebSocket? 2、WebSocket的报文格式 opcode payload len payload data 3、WebSocket握手过程 4、WebSocket代码的简单编写 三、WebSocket 和 HTTP的关系 1、相同点…...
rabbitMq------信道管理模块
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言信道管理的字段申明/删除交换机申明/删除队列绑定/解绑消息的发布消息确认订阅队列取消订阅信道内存管理类打开信道关闭信道/获取指定信道 总结 前言 信道是在…...
如何只用 CSS 制作网格?
来源:how-to-make-a-grid-like-graph-paper-grid-with-just-css 在看 用于打印到纸张的 CSS 这篇文章时,对其中的网格比较好奇,作者提供了 stackoverflow 的链接,就看到了来源的这个问题和众多回复。本文从里面挑选了一些个人比较…...
Linux安装RabbitMQ安装
1. RabbitMQ介绍 1.1 RabbitMQ关键特性 异步消息传递:允许应用程序在不直接进行网络调用的情况下交换消息。 可靠性:支持消息持久化,确保消息不会在系统故障时丢失。 灵活的路由:支持多种路由选项,包括直接、主题、…...
SpringBoot驱动的社区医院信息管理平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理社区医院信息平台的相关信息成为必然。开发…...
MyBatis-Plus如何分页查询?
MyBatis-Plus提供了一种简单而强大的分页查询功能,可以通过使用Page对象和Mapper接口中的方法来实现。以下是分页查询的基本步骤: 添加分页插件依赖 确保你的项目中已经添加了MyBatis-Plus的分页插件依赖。 <dependency><groupId>com.bao…...
云原生之容器编排实践-OpenEuler23.09离线安装Kubernetes与KubeSphere
背景 有互联网的日子确实美好,不过有时候,仅仅是有时候,你可能会面临离线部署 Kubernetes 与 KubeSphere 集群的要求。。 我们借助由青云开源的容器平台, KubeSphere 来进行可视化的服务部署。 KubeSphere 是在 Kubernetes 之上…...
构建企业数字化转型的战略基石——TOGAF框架的深度解析
数字化时代的企业变革需求 在全球范围内,数字化转型已成为企业提高竞争力、优化运营流程、提升客户体验的核心战略。数字技术的迅猛发展,不仅改变了传统行业的运作模式,也迫使企业重新思考其业务架构和技术基础设施。TOGAF(The O…...
docker -私有镜像仓库 - harbor安装
文章目录 1、镜像仓库简介2、Harbor简介3、下载与安装3.1、下载3.2、安装3.2.1、上传harbor-offline-installer-v2.8.2.tgz到虚拟机中解压并修改配置文件3.2.2、解压tgz包3.2.3、切换到解压缩后的目录下3.2.4、准备配置文件3.2.5、修改配置文件 4、启动Harbor5、启动关闭命令6、…...
头号积木玩家——软件工程专业职业生涯规划报告
说明:本报告为博主在浙江科技学院(现浙江科技大学)就读软件工程本科专业时,在必修课程《计算机导论》中撰写的报告。(报告主体2021年11月定稿,有删改) 标题说明:在电影《头号玩家》…...
Redis(初步认识和安装)
初识Redis 认识NoSQLSQL结构化:structure关联的:RelationalSQL查询ACID NoSQL非结构化无关联的非SQLBASE 认识Redis安装Redis 认识NoSQL SQL和NoSQL比较 SQL 结构化:structure 数据库中表的字段都有固定的结构 关联的:Relati…...
计算机网络:计算机网络概述:网络、互联网与因特网的区别
文章目录 网络、互联网与因特网的区别网络分类 互联网因特网基于 ISP 的多层次结构的互连网络因特网的标准化工作因特网管理机构因特网的组成 网络、互联网与因特网的区别 若干节点和链路互连形成网络,若干网络通过路由器互连形成互联网 互联网是全球范围内的网络…...
网络编程套接字TCP
前集回顾 上一篇博客中我们写了一个UDP的echo server,是一个回显服务器:请求是啥,响应就是啥 一个正常的服务器,要做三个事情: 读取请求并解析根据请求,计算响应把响应写回到客户端 DatagramPacket res…...
Git
Git-2.34.1-64-bitGit-2.34.1-64-bitTortoiseGit-2.4.0.2-64bitTortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN 下载Git-2.34.1-64-bit、TortoiseGit-2.4.0.2-64bit、TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN,依次安装。 # 配置本地Git的用户名与邮箱 git c…...
【日常记录】现在遇到的Y7000P亮度无法调节问题,无需改动注册表进行调整的方法。
1、winR 2、输入:services.msc 3、找到下面红框内的服务 4、右键后,点击重启任务,重启任务后,再次按热键即可恢复亮度调节。...
ubuntu20.04.6 触摸屏一体机,外接视频流盒子开机输入登录密码触屏失灵问题解决方法
1. 首先直接运行xrandr命令,查看设备的相关信息: 运行之后会显示当前连接设备的屏幕信息,如下图,LVDS和VGA-0,而HDMI屏幕为disconnect,意为没有连接: 2. 设置开机主屏幕显示: xrand…...
wordpress 做网站/网推公司干什么的
2016年6月6日, 加州讯,世界领先的高性能计算、数据中心端到端互连方案提供商Mellanox(纳斯达克交易所代码: MLNX)今天宣布,正式推出针对网络及存储应用的BlueField 系列SoC可编程芯片。该系列产品能够满足业界日益增长…...
建设设计网站公司/营销策划公司经营范围
前两天机房c2机子的系统崩了,一直要研究重新装系统的事,虽然是才开始接触机房,但是有一点必须很清楚,学生机c盘绝对安装了不少学生的教学软件,关键是这些软件必须是版本一致,状态一致,那么如果自…...
网站建设公司谁管/网店推广的作用
本来打算用绘制贝塞尔曲线的方法绘制心形,可是本数学渣怎么都搞不定那几个控制点坐标。研究了一上午,通过lineTo方法,最终还是绘制出封闭的心形图。还收获了意外的效果。 看来就差个女朋友,给她看了。 代码如下: .h文件…...
网站基础优化/站外推广方式有哪些
批注[……] 表示他人、自己、网络批注参考资料来源于* 书中批注* CSDN* GitHub* Google* 维基百科* YouTube* MDN Web Docs由于编写过程中无法记录所有的URL所以如需原文,请自行查询{……} 重点内容*……* 表示先前提到的内容,不赘述外增其余Web攻击详解…...
减肥产品网站模板/百度的电话人工客服电话
穆僮电脑小课堂 (QQ群:141826908)摘编整理如果你不小心把ubuntu引导弄坏了,比如重装了windows,比如格式化错了盘等等,那么通过下述方法可以简单的修复ubuntu首先,插入ubuntu的安装盘,没有的话只好做一个了&…...
移动端高端网站开发/网络推广协议合同范本
这是一道比较经典的题目。我先是在百度的在线笔试中遇到,然后发现剑指Offer上有原题。当然题目并不完全一样不过大致相同。 百度笔试是给你两个根节点判断第棵树是不是第一棵树的子树。剑指Offer是问你第二颗数是不是第一棵树的子结构(也就是说可是是第一…...