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生成的名字一致

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

在Kubernetes(k8s)环境中,使用Spring Boot的应用如果需要访问Secret(包含敏感信息,如API密钥、密码等),通常会在K8s Secret中存储,并通过Service Account或ConfigMap的方式让应用能够安全地获取这些信息。以下是将K8s Secret加载到Spring Boot应用中的步骤: 1. **创建K8s Secret**: 使用`kubectl create secret`命令创建一个Secret,例如: ```sh kubectl create secret generic myapp-secret --from-literal=username=admin,apiKey=your-api-key ``` 这里假设Secret名为`myapp-secret`,包含了用户名API密钥。 2. **关联Service Account**: 在Spring Boot应用的Deployment或Pod配置中,关联Service Account以允许访问Secret。在YAML文件中添加`imagePullSecrets`或`serviceAccountName`字段: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-app-deployment spec: serviceAccountName: default # 更改为你的Service Account名 ... ``` 3. **配置Spring Boot**: - 使用Spring Cloud Config Server或Spring Cloud Kubernetes Secrets Client: - 如果使用Spring Cloud Config Server,你需要在应用的配置中心(如GitLab CI/CD)上配置对K8s Secret的访问。 - 如果使用Spring Cloud Kubernetes Secrets Client,直接在Spring Boot配置类中启用并配置,如使用`@KubernetesPropertySource`注解。 4. **读取Secret**: 使用Spring Cloud Kubernetes Secrets Client的`@Value`或`Environment.getRequiredProperty()`方法从Secret中读取值: ```java @Value("${username}") private String username; @Value("${apiKey}") private String apiKey; ``` 5. **应用部署到k8s**: 将Spring Boot应用打包成镜像,然后使用`kubectl apply -f deployment.yaml`部署到k8s集群中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值