郑州做公司网站的,做公司网站别人能看到吗6,潍坊建设网站多少钱,网站开发完没人运营使用ConfigMap 和 Secret
实验目标#xff1a; 学习如何使用 ConfigMap 和 Secret 来管理应用的配置。
实验步骤#xff1a;
创建一个 ConfigMap 存储应用配置。创建一个 Secret 存储敏感信息#xff08;如数据库密码#xff09;。在 Pod 中挂载 ConfigMap 和 Secret 学习如何使用 ConfigMap 和 Secret 来管理应用的配置。
实验步骤
创建一个 ConfigMap 存储应用配置。创建一个 Secret 存储敏感信息如数据库密码。在 Pod 中挂载 ConfigMap 和 Secret并验证应用读取配置。 今天我们来做一下分享的可练习实验中的第二个实验使用ConfigMap 和 Secret
首先我们需要先知道ConfigMap 和 Secret到底是什么东西
ConfigMap 是一种用于存储非机密数据的键值对。它可以用来保存环境变量、命令行参数、配置文件等。Secret 是一种用于存储敏感数据如密码、令牌、密钥的资源类型。与 ConfigMap 不同Secret 中的数据是经过 Base64 编码的以便提供一定的安全性。
示例场景
假设我们有一个简单的 Node.js web 应用需要以下配置
应用程序配置如日志级别数据库凭证用户名和密码
步骤
1、创建应用程序配置的ConfigMap 首先我们创建一个 ConfigMap存储应用程序的配置。
# app-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: app-config
data:LOG_LEVEL: debugPORT: 3000使用以下命令应用这个配置
kubectl apply -f app-config.yaml2、创建数据库凭证的Secret 接下来我们创建一个 Secret存储数据库的用户名和密码。
# db-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: db-secret
data:DB_USERNAME: YWRtaW4 # Base64 编码的 adminDB_PASSWORD: cGFzc3dvcmQ # Base64 编码的 password可以使用 echo -n admin | base64 来生成自己的账号密码 使用以下命令应用这个配置
kubectl apply -f db-secret.yaml3、创建node.js应用的Dockerfile 我们需要一个简单的 Node.js 应用读取配置和数据库凭证。创建一个 Dockerfile 来构建应用的 Docker 镜像。
# Dockerfile
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD [node, app.js]同时需要在项目目录中创建一个package.json文件确保 Dockerfile 正确地复制和使用该文件
{name: node-app,version: 1.0.0,description: Node.js application,main: app.js,dependencies: {express: ^4.17.1}
}创建 app.js 以读取配置和凭证
// app.js
const express require(express);
const app express();const logLevel process.env.LOG_LEVEL || info;
const port process.env.PORT || 3000;const dbUsername process.env.DB_USERNAME;
const dbPassword process.env.DB_PASSWORD;app.get(/, (req, res) {res.send(Log Level: ${logLevel}, DB Username: ${dbUsername});
});app.listen(port, () {console.log(App running on port ${port});
});
4、构建并推送Docker 镜像 构建并推送 Docker 镜像到你的 Docker 仓库例如 Docker Hub 或私有仓库。
先构建镜像
docker build -t your-docker-repo/node-app:latest .注意 这里构建时会从dockerhub上拉取镜像因为最近网络的问题被限了很多。这里我直接配置代理环境这样构建时会快很多。具体的配置代理请参考虚拟机开启网络代理设置
我这里可以正常访问ok 接着继续构建镜像 推送镜像到hub仓库
docker push your-docker-repo/node-app:latest这里在推送时我还是遇到了网络问题索性我直接将镜像推送到阿里云的镜像仓库这样都在国内的情况下速度也会很快还不会受影响。具体的操作移步 阿里云免费仓库 言归正传虽说已经创建好了仓库但是由于我们构建镜像时的命名规则并未按照阿里云仓库的要求来现在上传时还是会有一些问题我们来修改一下
使用docker tag 命令为现有镜像添加新的标签
docker tag qingtongqingc/node-app:latest registry.cn-hangzhou.aliyuncs.com/qingtongqingc/node-app:latest先登录阿里云Docker Registry
docker login --usernamealiyun***** registry.cn-hangzhou.aliyuncs.com然后将新命名的镜像推送至仓库
docker push registry.cn-hangzhou.aliyuncs.com/qingtongqingc/node-app:latest我们可以在仓库中找到刚被推送上去的镜像
5、创建kubernetes部署 现在我们创建一个 Kubernetes 部署将 ConfigMap 和 Secret 注入到 Pod 中。
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: node-app-deployment
spec:replicas: 1selector:matchLabels:app: node-apptemplate:metadata:labels:app: node-appspec:containers:- name: node-appimage: registry.cn-hangzhou.aliyuncs.com/qingtongqingc/node-app:latestports:- containerPort: 3000env:- name: LOG_LEVELvalueFrom:configMapKeyRef:name: app-configkey: LOG_LEVEL- name: PORTvalueFrom:configMapKeyRef:name: app-configkey: PORT- name: DB_USERNAMEvalueFrom:secretKeyRef:name: db-secretkey: DB_USERNAME- name: DB_PASSWORDvalueFrom:secretKeyRef:name: db-secretkey: DB_PASSWORD使用以下命令部署这个应用
kubectl apply -f deployment.yaml6、创建服务暴露应用
# service.yaml
apiVersion: v1
kind: Service
metadata:name: node-app-service
spec:selector:app: node-appports:- protocol: TCPport: 8080targetPort: 3000type: LoadBalancer#因为我们昨天的80端口已经分给nginx服务这里使用8080端口使用以下命令部署这个应用
kubectl apply -f service.yaml验证
1、检查pods和服务状态
kubectl get pods
kubectl get services2、访问应用 尝试从外部访问node.js程序使用集群节点的 IP 地址和 NodePort 端口 访问成功
通过以上步骤你创建了一个 Kubernetes 部署使用 ConfigMap 管理应用程序配置使用 Secret 管理数据库凭证。你还将这些配置和凭证注入到应用程序中并通过服务将应用暴露出来。这种方法可以有效地分离配置和代码提升安全性和灵活性。