当前位置: 首页 > news >正文

安庆建设银行网站网站建设策划书范文

安庆建设银行网站,网站建设策划书范文,手机如何做微商城网站设计,h5登录页面简单记录问题 一、问题描述 希望通过Java程序使用Kubernetes提供的工具包实现对Kubernetes集群core API的调用&#xff0c;但是在高版本上遇见权限验证问题4xx。 <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifact…

简单记录问题

一、问题描述

希望通过Java程序使用Kubernetes提供的工具包实现对Kubernetes集群core API的调用,但是在高版本上遇见权限验证问题4xx。

        <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifactId><version>20.0.0</version> <!-- 请根据需要选择合适的版本 --></dependency>

权限验证的问题:

{"kind": "Status","apiVersion": "v1","metadata": {},"status": "Failure","message": "pods is forbidden: User \"system:anonymous\" cannot list resource \"pods\" in API group \"\" at the cluster scope","reason": "Forbidden","details": {"kind": "pods"},"code": 403
}

大意是system:anonymous匿名用户被禁止去访问相应集群的pods资源信息。

Kubernetes支持许多不同的身份验证方案,这些方案几乎总是在集群外部实现,包括X.509证书,基本身份验证,bearer令牌,用于通过可信身份提供商进行身份验证的OpenID Connect(OIDC)等。使用API服务器上的相关配置选项可以启用多种方案,因此请务必为计划使用的身份验证方案提供这些选项。例如,X.509客户端证书身份验证需要包含一个或多个CA证书( -client-ca-file)文件路径。需要记住的一点是,默认情况下,任何未通过其中一种身份验证方案验证的API请求都会被视为匿名请求。匿名用户(system:anonymous)默认被拒绝访问任何 API。即使是基本的 API(如列出 Pods),也需要显式分配权限,现阶段,所有 API 调用都需要经过明确的认证和授权

查看一下集群的默认验证模式设置:

grep -C3 'authorization-mode' /etc/kubernetes/manifests/kube-apiserver.yaml

95bf9d4db0d5495ea5346935549966ec.png

默认开启的是RBAC(基于角色的访问控制)。

各类模式以及下方各类k8s资源的介绍可参见:

Kubernetes K8S之鉴权RBAC详解 - 踏歌行666 - 博客园

二、解决方案

我需要针对集群中相关资源(pods lists)通过Java client进行增删改查操作,那么最直接快速的方式就是创建一个具有集群超级用户权限的用户,并将其对应的Key用于Java client,进行API的访问操作。

Prepare:查看clusterrole

clusterrole是集群范围的角色,用于管理整个集群中的资源。

通过指令

kubectl get clusterroles

查看到集群下有众多的clusterrole

1a37a21bf2904455be6ddf10428f4583.png

其中有cluster-admin角色,我们可以通过如下指令查看其权限:

kubectl get clusterrole cluster-admin -o yaml

d601bcfb99374f58bb8bf06a892cf324.png

我们能看出它是 Kubernetes 内置的超级权限角色,其中rules部分均为通配符,表明该角色对所有 API 组的所有资源具有所有操作权限,即为管理员提供对集群所有资源的完全控制。

具体操作

1.将用户与cluster-admin角色相绑定

kubectl create clusterrolebinding admin-access --clusterrole=cluster-admin --user=apiinvoker

74deac3c235d45a399813ba1cde8bf99.png

2.创建serviceaccount

#serviceaccount 后接名称  
kubectl create serviceaccount apiinvoker -n kube-system

7db1f02757f343febf2f7d1bca54d9c9.png

2.将serviceaccount绑定到cluster-admin

kubectl create clusterrolebinding admin-sa-binding --clusterrole=cluster-admin --serviceaccount=kube-system:apiinvoker

8a24fdbc187441e79977b2d0c59fc65f.png

3.创建Token

分为临时的(选择一)以及永久的(选择二)两种方式。

选择一

 下述代码能直接生成并显示token,但是该方式的token是存在有效期的。

# 需要设置有效期 添加参数--duration 其他参数使用指令kubectl -n kube-system create token --help查看
kubectl -n kube-system create token apiinvoker

选择二

要创建永久有效的Token需要使用Secret方式

在创建serviceaccount之后为其手动创建Secret,并将其与serviceaccount绑定。

1. 创建apiinvoker-token.yaml

apiVersion: v1
kind: Secret
metadata:name: apiinvoker-tokennamespace: kube-systemannotations:kubernetes.io/service-account.name: "apiinvoker" # 绑定到服务账户 改成你自定义的serviceaccount
type: kubernetes.io/service-account-token

2. 运行yaml文件

kubectl apply -f apiinvoker-token.yaml

4.获取serviceaccount的Token

kubectl -n kube-system describe secret apiinvoker-token

bd67d347f2374d9c965a56531318c620.png

 这样就能在Java client使用这个token进行API的调用了。

5.编写Java程序代码示例

在pom中添加依赖:

        <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifactId><version>20.0.0</version> <!-- 请根据需要选择合适的版本 --></dependency>

运行如下示例代码:

package com.yang.collector;import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.V1NamespaceList;
import io.kubernetes.client.openapi.models.V1PodList;import java.io.IOException;public class K8SAPITest {public static void main(String[] args) {try {ApiClient client = new ApiClient();client.setBasePath("https://k8s-master IP:6443"); // 集群的 API 地址client.setApiKey("Bearer "+"生成的Token");
//            client.setDebugging(true);client.setVerifyingSsl(false);Configuration.setDefaultApiClient(client);// 将配置设置为默认的 API 客户端io.kubernetes.client.openapi.Configuration.setDefaultApiClient(client);// 创建 CoreV1Api 实例CoreV1Api api = new CoreV1Api();// 获取所有命名空间中的 Pod 列表CoreV1Api.APIlistPodForAllNamespacesRequest list = api.listPodForAllNamespaces();V1PodList execute = list.execute();// 遍历并打印每个 Pod 的信息execute.getItems().forEach(v1Pod -> {System.out.println(v1Pod.toJson());});} catch (Exception e) {e.printStackTrace();}}
}

结果如下:

687fbb44584d40d09c1701470b3cb79e.png

 说明调用成功,克服权限验证问题。

:当然在实际的生产环境中不建议直接将 超级权限(如 cluster-admin 交给 Java 程序(或任何外部程序)。这样做存在高安全风险,可能导致集群被误操作或恶意利用。

但是使用 服务账户(ServiceAccount) 的 Token的形式进行细粒度权限控制API的调用是推荐的,本文直接赋值所有资源的所有操作权限十分不可取,仅供学习参考。

推荐方式:在生产环境中,所有权限分配都应该基于实际需求,授予 Java 程序仅需要的权限即可。创建自定义Role或ClusterRole,仅授予程序需要的权限,再通过Rolebinding或ClusterRoleBinding将权限绑定到服务账户,再将此token交给API调用程序。token的使用也不建议永久有效,通过使用kubectl create token动态生成短期 Token,供程序动态获取使用更为安全,避免了长期token的泄露风险。

参考文献

1.Kubernetes K8S之鉴权RBAC详解 - 踏歌行666 - 博客园

2.API 访问控制 | Kubernetes

3.Kubernetes集群组件的安全_手机搜狐网

 

 

http://www.hkea.cn/news/201140/

相关文章:

  • 查企业网站有哪些站长统计app软件
  • 做a高清视频在线观看网站济源新站seo关键词排名推广
  • 刚做的网站怎么搜索不出来百度seo收录软件
  • 视频拍摄app站长工具seo综合查询广告
  • 新闻单位建设网站的意义武汉seo推广优化
  • 低价网站公司软文怎么写
  • 东莞市建设公共交易中心网站百度官网首页
  • 如何建立的网站能争钱优化营商环境 助推高质量发展
  • 做百度网站营销型网站建设排名
  • 网站域名被黑国际新闻最新消息战争
  • 苏州网站开发公司济南兴田德润厉害吗网络自动推广软件
  • 广药网站建设试卷株洲最新今日头条
  • 网站建设管理考核办法微信推广平台怎么做
  • 网站新闻模块代码网络推广有哪些常见的推广方法
  • 合肥大型网站如何推广普通话
  • 高端网站制作软件怎么样推广自己的店铺和产品
  • 无障碍浏览网站怎么做关键词seo排名优化推荐
  • wordpress 247seo推广系统
  • 做深圳门户网站起什么名字好泰州seo外包公司
  • 网站视频上传怎么做百度站长平台论坛
  • wordpress农业模板下载小时seo
  • 做网站语言排名2018发帖推广哪个平台好
  • 销氪crmseo入门讲解
  • 蒙阴哪有做淘宝网站的钓鱼网站制作教程
  • 网站如何做导航条下拉菜单怎么做百度网页
  • 网站开发都做什么平台推广精准客源
  • 网站建设共享ip宁波seo搜索引擎优化
  • 学校网站建设必要性搜索引擎排名
  • 哪里有做区块链网站的百度网址大全在哪里找
  • 加盟平台网站怎么做竞价托管多少钱一个月