k8s中service和secret

Service存在意义

防止pod失联,基于服务发现

例如将前端的服务和后端的服务分别部署在不同的pod上面的,前端访问后端的ip地址就需要通过service给他pod IP来获得其实际需要访问的地址,service和注册中心网有异曲同工的地方。

定义一组关于pod的访问策略(负载均衡)

负载均衡的策略可以根据很多指标来指定,每次都将任务分给较空闲的pod

Pod与Service的关系

service会根据标签对pod进行处理,selector中会记录标签对应的一些pod,每个pod上都绑定一个label。
service对外会创建一个虚拟ip(vip)收到请求之后会将请求转发到相应的pod当中。

常用的service类型

配置位置

spec:
	ports:
	- port: 80
	  protocol: TCP
	  targetPort: 80
	selector: 
	  app: web
	type: NodePort/ClusterIP
status:
	LoadBalancer: {}

(1)cluster IP:集群内部进行使用
(2)NodePort:对外暴露应用时使用
(3)LoadBalancer:对外访问应用使用,公有云

node内网部署应用,外网一般不能访问到
解决方案:

  1. 找到一台可以进行外网访问的机器,安装nginx,反向代理
  2. 手动把可以访问的节点添加到nginx里面

LoadBalancer:公有云,做到负载均衡,提供控制器,只需要连接控制器就可以将Node加到负载均衡当中。

Secret

加密数据存在etcd当中,让Pod容器以挂载Volume方式进行访问

场景:凭证
使用步骤:

  1. 创建一个secret加密的数据
apiVersion: v1
kind: Secret
metadata: 
	name: mysecret
type: Opaque
data: 
	username: (base64编码)
	password: (base64编码)
kubectl create -f secret.yaml

以变量形式挂载到容器中

apiVersion: v1
kind: Secret
metadata: 
	name: mypod
spec:
	containers: 
	- name: nginx
	  image: nginx
	  env:
	  	- name: SECRET_USERNAME
	  	  valueFrom:
	  	  	secretKeyRef:
	  	  		name: mysecret
	  	  		key: username
	  	- name: SECRET_PASSWORD
	  	  valueFrom:
	  	  	secretKeyRef:
	  	  		name: mysecret #需要和secret生成的名字一致
	  	  		key: password

以Volume形式挂载到pod容器中

apiVersion: v1
kind: Secret
metadata: 
	name: mypod
spec:
	containers: 
	- name: nginx
	  image: nginx
	  valueMounts:
	  	- name: foo
	  	  mountPath: "etc/foo"
			readOnly: true
	 volumes:
	  	- name: foo
	  	  secret:
	  	  	secretName: mysecret #需要和secret生成的名字一致

之后就可以去相应的目录下访问账户和密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值