标题:
kubernetes-client的使用--java中提交argo工作流(10)
[打印本页]
作者:
look_w
时间:
2019-5-16 14:43
标题:
kubernetes-client的使用--java中提交argo工作流(10)
解决方案 一、增加role
当集群是基于RBAC(Role-Based Access Control,基于角色的访问控制)时,默认账户有很多的限制,比如不能支持组件,输出等等。
执行以下命令授权默认的服务账户在默认的namespace中拥有admin的权限
我们在本地提交argo submit之前会先运行语句如下:
kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default
1
同理,在pod中也需要拿到权限。
pod拿到权限的方法之一就是通过role。
role分为两种 一种是命名空间的role,使用 rolebinding进行绑定。一种是集群的role,使用clusterrolebinding绑定。
我们可以根据自己的需求进行role的绑定。
因为我们这里会访问api的根目录,所以需要比较大的权限,使用clusterrolebinding绑定。
步骤如下:
首先创建一个report-api的pod专用的serviceaccount。
使用命令
vi report-api-account.yaml
1
输入内容如下:
apiVersion: v1
kind: ServiceAccount
metadata:
name: report-api
1
2
3
4
使用如下命令创建
kubectl create -f report-api-account.yaml
1
然后给default命名空间下的report-api赋予cluster-admin的角色。
在任意有kubectl命令行的环境中运行
kubectl create clusterrolebinding report-api-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=default:report-api
1
输出如下:
zhangxiaofans-MacBook-Pro:platform joe$ kubectl create clusterrolebinding report-api-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=default:report-api
clusterrolebinding.rbac.authorization.k8s.io "report-api-on-cluster-admin" created
1
2
最后在创建pod的yaml的depolyment中加入参数
serviceAccount: report-api
1
完成的depolyment.yaml示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: report-api
spec:
selector:
matchLabels:
app: report-api
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: report-api
spec:
serviceAccount: report-api
containers:
- name: report-api
image: 123/vpc/java8:latest
imagePullPolicy: Always
command: ["/bin/sh","-c"]
args: ["java -jar /jar/report-api-1.0.0-SNAPSHOT.jar --spring.profiles.active=beta"]
securityContext:
capabilities:
add:
- NET_ADMIN
ports:
- containerPort: 9988
volumeMounts:
- name: workdir
mountPath: /jar
env:
- name: USERDB_USERNAME_BETA
value: _USERDB_USERNAME_BETA_
- name: USERDB_PASSWORD_BETA
value: _USERDB_PASSWORD_BETA_
initContainers:
- name: pull-lib
image: anigeo/awscli:latest
command: ["/bin/sh","-c"]
args: ["ls"]
env:
- name: AWS_DEFAULT_REGION
value: cn-southwest-2
volumeMounts:
- name: workdir
mountPath: /jar
volumes:
- name: workdir
emptyDir: {}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0