当前位置:   article > 正文

Kubernetes 使用configmap挂载卷给Pod内的nginx容器,并且实现nginx的代理服务_nginx configmap

nginx configmap

目录

实验:使用configmap挂载卷给Pod内的nginx容器

1、创建nginx.conf配置文件(必须由nginx镜像里的nginx.conf修改而来,防止出现配置不相似的情况出现,导致访问不了nginx网页)

2、通过nginx.conf文件创建configmap容器(注意nginx.conf文件必须在该目录下)

3、查看创建的configmap和它的详细资料

4、根据configmap创建nginx-deployment.yaml文件

5、运行nginx-deployment.yaml,创建Pod

6、创建Service发布nginx容器服务,创建nginx-service.yaml文件

7、运行nginx-service.yaml,创建Pod

8、验证访问

实验:使用Configmap将nginx容器变为代理服务器,使集群内访问集群外边的资源通过nginx tcp代理。

1、使用nginx-config.yaml文件创建Configmap

2、搭建nginx容器,调用Configmap更新nginx的配置文件(添加入网口的标签):

3、运行 nginx-deployment2.yaml,搭建Pod

4、运行 nginx-service2.yaml,搭建Service服务

5、运行nginx-service2.yaml 和 nginx-service3.yaml, 搭建Service服务

6、验证访问:


实验:使用configmap挂载卷给Pod内的nginx容器

1、创建nginx.conf配置文件(必须由nginx镜像里的nginx.conf修改而来,防止出现配置不相似的情况出现,导致访问不了nginx网页)

  1. (base) root@sd-cluster-04:/etc/nginx# cat nginx.conf
  2. # claylpf test
  3. user nginx;
  4. worker_processes auto;
  5. error_log /var/log/nginx/error.log notice;
  6. pid /var/run/nginx.pid;
  7. events {
  8. worker_connections 1024;
  9. }
  10. http {
  11. include /etc/nginx/mime.types;
  12. default_type application/octet-stream;
  13. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  14. '$status $body_bytes_sent "$http_referer" '
  15. '"$http_user_agent" "$http_x_forwarded_for"';
  16. access_log /var/log/nginx/access.log main;
  17. sendfile on;
  18. #tcp_nopush on;
  19. keepalive_timeout 65;
  20. #gzip on;
  21. include /etc/nginx/conf.d/*.conf;
  22. }
  23. (base) root@sd-cluster-04:/etc/nginx#

2、通过nginx.conf文件创建configmap容器(注意nginx.conf文件必须在该目录下)

(base) root@sd-cluster-04:/etc/nginx# kubectl create configmap nginx-config --from-file=nginx.conf -n testns

3、查看创建的configmap和它的详细资料

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl get configmap nginx-config -n testns #查看是否成功运行
  2. NAME DATA AGE
  3. nginx-config 1 77s
  4. (base) root@sd-cluster-04:/etc/nginx# kubectl describe configmap/nginx-config -n testns # 查看详细信息
  5. Name: nginx-config
  6. Namespace: testns
  7. Labels: <none>
  8. Annotations: <none>
  9. Data
  10. ====
  11. nginx.conf:
  12. ----
  13. # claylpf test
  14. user nginx;
  15. worker_processes auto;
  16. error_log /var/log/nginx/error.log notice;
  17. pid /var/run/nginx.pid;
  18. events {
  19. worker_connections 1024;
  20. }
  21. http {
  22. include /etc/nginx/mime.types;
  23. default_type application/octet-stream;
  24. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  25. '$status $body_bytes_sent "$http_referer" '
  26. '"$http_user_agent" "$http_x_forwarded_for"';
  27. access_log /var/log/nginx/access.log main;
  28. sendfile on;
  29. #tcp_nopush on;
  30. keepalive_timeout 65;
  31. #gzip on;
  32. include /etc/nginx/conf.d/*.conf;
  33. }
  34. Events: <none>
  35. (base) root@sd-cluster-04:/etc/nginx#

4、根据configmap创建nginx-deployment.yaml文件

  1. (base) root@sd-cluster-04:/etc/nginx# cat nginx-deployment.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: nginx-deployment
  6. namespace: testns
  7. spec:
  8. replicas: 1
  9. selector:
  10. matchLabels:
  11. app: clay-nginx
  12. template:
  13. metadata:
  14. labels:
  15. app: clay-nginx
  16. spec:
  17. containers:
  18. - name: nginx
  19. image: nginx:1.24
  20. ports:
  21. - containerPort: 80
  22. volumeMounts:
  23. - name: nginx-config-volume
  24. mountPath: /etc/nginx/nginx.conf
  25. subPath: nginx.conf
  26. volumes:
  27. - name: nginx-config-volume
  28. configMap:
  29. name: nginx-config
  30. items:
  31. - key: nginx.conf
  32. path: nginx.conf
  33. (base) root@sd-cluster-04:/etc/nginx#

代码解释:

  1. 这是一个 Kubernetes Deployment 的 YAML 文件,用于定义一个部署配置。以下是逐行解释该文件的内容:
  2. 1. `apiVersion: apps/v1`: 这一行指定了 Kubernetes API 的版本,以及使用的资源类型是 Deployment。
  3. 2. `kind: Deployment`: 指定了资源的种类,这是一个部署 (Deployment)。
  4. 3. `metadata:`: 定义资源的元数据,包括名称和命名空间。
  5. - `name: nginx-deployment`: 部署的名称是 "nginx-deployment"。
  6. - `namespace: testns`: 部署所属的命名空间是 "testns"。
  7. 6. `spec:`: 定义了部署的规格,包括副本数、选择器以及 Pod 模板。
  8. - `replicas: 1`: 指定了要运行的副本数量,这里是 1 个。
  9. - `selector:`: 选择器用于确定要管理的 Pod 集合。
  10. - `matchLabels:`: 指定了需要匹配的标签。
  11. - `app: clay-nginx`: 匹配标签中含有 "app: clay-nginx" 的 Pod。
  12. - `template:`: 定义了要创建的 Pod 模板。
  13. - `metadata:`: 定义 Pod 模板的元数据,包括标签。
  14. - `labels:`: 指定了 Pod 的标签,这里是 "app: clay-nginx"。
  15. - `spec:`: 定义了 Pod 的规格。
  16. - `containers:`: 定义了容器列表。
  17. - `name: nginx`: 定义容器的名称为 "nginx"。
  18. - `image: nginx:1.24`: 指定容器使用的镜像,这里使用的是 Nginx 版本 1.24。
  19. - `ports:`: 定义容器的端口配置。
  20. - `containerPort: 80`: 容器监听的端口是 80。
  21. - `volumeMounts:`: 定义了卷挂载配置,将卷挂载到容器内。
  22. - `name: nginx-config-volume`: 指定挂载卷的名称,这个名称将与下面定义的卷匹配。
  23. - `mountPath: /etc/nginx/nginx.conf`: 指定挂载的路径在容器内的位置。
  24. - `subPath: nginx.conf`: 指定在卷中的子路径。
  25. - `volumes:`: 定义了卷的配置。
  26. - `name: nginx-config-volume`: 定义了一个名为 "nginx-config-volume" 的卷。
  27. - `configMap:`: 指定卷的类型为 ConfigMap。
  28. - `name: nginx-config`: 指定 ConfigMap 的名称,这个名称将与集群中的 ConfigMap 匹配。
  29. - `items:`: 指定要从 ConfigMap 中提取的键值对。
  30. - `key: nginx.conf`: 指定键的名称。
  31. - `path: nginx.conf`: 指定将键的值映射到容器内的路径。
  32. 这个配置文件描述了一个部署,它将创建一个 Pod,其中运行一个名为 "nginx" 的容器,该容器使用 Nginx 1.24 镜像,并将一个名为 "nginx-config-volume" 的 ConfigMap 挂载到容器内的 `/etc/nginx/nginx.conf` 路径上。这样,Nginx 容器将使用 ConfigMap 中的配置文件来配置其行为。

5、运行nginx-deployment.yaml,创建Pod

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl apply -f nginx-deployment.yaml
  2. (base) root@sd-cluster-04:/etc/nginx# kubectl get pods -o wide -n testns
  3. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  4. es-cluster-0 0/1 Terminating 0 62d 10.244.5.163 sd-cluster-02 <none> <none>
  5. mysql-deployment-66c4d975f5-zm4sz 1/1 Running 0 5d1h 10.244.0.212 sd-cluster-04 <none> <none>
  6. nginx-deployment-67fb5f6db7-9ltlb 1/1 Running 0 21m 10.244.1.254 sd-cluster-05 <none> <none>
  7. redis-deployment-f7d7dd455-xk7h8 1/1 Running 0 5d 10.244.0.215 sd-cluster-04 <none> <none>
  8. (base) root@sd-cluster-04:/etc/nginx#

6、创建Service发布nginx容器服务,创建nginx-service.yaml文件

  1. (base) root@sd-cluster-04:/etc/nginx# cat nginx-service.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: nginx-service
  6. namespace: testns
  7. labels:
  8. app: clay-nginx
  9. spec:
  10. type: NodePort
  11. selector:
  12. app: clay-nginx
  13. ports:
  14. - protocol: TCP
  15. port: 80
  16. targetPort: 80
  17. nodePort: 31273
  18. (base) root@sd-cluster-04:/etc/nginx#

逐行解释:

  1. 这是一个 Kubernetes Service 的 YAML 文件,用于创建一个服务资源。以下是逐行解释该文件的内容:
  2. 1. `apiVersion: v1`: 这一行指定了 Kubernetes API 的版本,以及使用的资源类型是 Service。
  3. 2. `kind: Service`: 指定了资源的种类,这是一个服务 (Service)。
  4. 3. `metadata:`: 定义了服务的元数据,包括名称、命名空间和标签。
  5. - `name: nginx-service`: 服务的名称是 "nginx-service"。
  6. - `namespace: testns`: 服务所属的命名空间是 "testns"。
  7. - `labels:`: 为服务添加标签。
  8. - `app: clay-nginx`: 将标签 "app: clay-nginx" 添加到服务上。
  9. 6. `spec:`: 定义了服务的规格,包括服务类型、选择器和端口配置。
  10. - `type: NodePort`: 指定了服务的类型为 NodePort,这意味着服务将暴露到每个节点的指定端口上。
  11. - `selector:`: 选择器用于确定哪些 Pod 属于这个服务。
  12. - `app: clay-nginx`: 匹配标签中含有 "app: clay-nginx" 的 Pod。
  13. - `ports:`: 定义了服务监听的端口配置。
  14. - `protocol: TCP`: 指定了端口的传输协议是 TCP。
  15. - `port: 80`: 服务监听的端口号是 80。
  16. - `targetPort: 80`: 服务将流量转发到后端 Pod 的端口号是 80。
  17. - `nodePort: 31273`: 如果服务类型是 NodePort,这个配置项指定了节点上用于访问服务的端口号。在这个例子中,服务将在节点上的端口 31273 上监听,从而可以通过节点的 IP 地址和该端口访问该服务。
  18. 这个配置文件描述了一个服务,它会将流量从节点的端口 31273 转发到匹配标签 "app: clay-nginx" 的后端 Pod 上的端口 80。这种服务类型通常用于在外部网络上访问 Kubernetes 集群中的服务。

7、运行nginx-service.yaml,创建Pod

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl apply -f nginx-service.yaml
  2. (base) root@sd-cluster-04:/etc/nginx# kubectl get service -o wide -n testns
  3. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
  4. mysql-service NodePort 10.96.132.123 <none> 3306:30859/TCP 5d app=mysql
  5. nginx-service NodePort 10.96.87.157 <none> 80:31273/TCP 65m app=clay-nginx
  6. redis-service NodePort 10.96.10.164 <none> 6379:30026/TCP 5d app=redis
  7. (base) root@sd-cluster-04:/etc/nginx#

8、验证访问

首先访问容器内的配置文件是否发生更改:

再次访问浏览器,产科nginx的Web服务是否发布 

实验:使用Configmap将nginx容器变为代理服务器,使集群内访问集群外边的资源通过nginx tcp代理。

1、使用nginx-config.yaml文件创建Configmap

  1. (base) root@sd-cluster-04:/etc/nginx# cat nginx-config.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: nginx-config
  6. namespace: testns
  7. data:
  8. nginx.conf: |
  9. user nginx;
  10. worker_processes auto;
  11. events {
  12. worker_connections 1024;
  13. }
  14. stream {
  15. upstream hive {
  16. server 192.168.1.209:3306;
  17. }
  18. server {
  19. listen 8888;
  20. proxy_pass hive;
  21. }
  22. }
  23. http {
  24. include /etc/nginx/mime.types;
  25. default_type application/octet-stream;
  26. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  27. '$status $body_bytes_sent "$http_referer" '
  28. '"$http_user_agent" "$http_x_forwarded_for"';
  29. access_log /var/log/nginx/access.log main;
  30. sendfile on;
  31. #tcp_nopush on;
  32. keepalive_timeout 65;
  33. #gzip on;
  34. include /etc/nginx/conf.d/*.conf;
  35. }
  36. (base) root@sd-cluster-04:/etc/nginx#

 代码解释:(使用了nginx的代理功能)

  1. 这是一个名为 `nginx-config` 的 Kubernetes ConfigMap 配置,用于存储 Nginx 的配置文件内容。让我逐行解释这个配置文件的各个部分:
  2. 1. `user nginx;`: 设置 Nginx 进程运行的用户为 `nginx`。
  3. 2. `worker_processes auto;`: 设置 Nginx 使用的工作进程数量自动适应可用的 CPU 内核数。
  4. 3. `events { ... }`: 在这个块中,定义了 Nginx 事件模块的配置。通常用于配置 Nginx 如何处理客户端连接和网络事件。
  5. - `worker_connections 1024;`: 设置每个工作进程可以同时处理的最大连接数为 1024
  6. 4. `stream { ... }`: 这是一个 Nginx 流块,通常用于配置 TCP/UDP 代理或负载均衡。在这里,定义了一个名为 `hive` 的上游服务器,它将流量代理到 `192.168.1.209` 的 `3306` 端口。这似乎是将流量代理到 MySQL 服务器。
  7. - `server { ... }`: 定义了一个监听在 `8888` 端口的流服务器块,该服务器将传入的流量代理到名为 `hive` 的上游服务器。
  8. 5. `http { ... }`: 这是一个 Nginx HTTP 块,用于配置 HTTP 服务器。
  9. - `include /etc/nginx/mime.types;`: 引用了 MIME 类型文件,用于指定文件扩展名与 MIME 类型之间的映射关系。
  10. - `default_type application/octet-stream;`: 设置默认的 MIME 类型为 `application/octet-stream`,如果无法确定具体的文件类型时将使用该类型。
  11. - `log_format main '...';`: 定义了日志格式,该格式用于记录访问日志信息。
  12. - `access_log /var/log/nginx/access.log main;`: 配置了访问日志文件的位置和使用的日志格式。
  13. - `sendfile on;`: 启用文件传输,加快文件传输速度。
  14. - `keepalive_timeout 65;`: 设置客户端保持连接的超时时间。
  15. - `include /etc/nginx/conf.d/*.conf;`: 包含了 `/etc/nginx/conf.d/` 目录下的其他配置文件。
  16. 总之,这个配置文件定义了一个 Nginx 服务器,该服务器通过 `8888` 端口接受流量,并将流量代理到名为 `hive` 的上游服务器,而该上游服务器似乎是一个 MySQL 服务器。此外,该配置文件还包括了一些 HTTP 服务器的配置,例如访问日志、MIME 类型映射等。这个配置文件的具体功能可能需要根据实际需求来确定。

创建Configmap:

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl apply -f nginx-config.yaml
  2. configmap/nginx-config created

2、搭建nginx容器,调用Configmap更新nginx的配置文件(添加入网口的标签):

  1. (base) root@sd-cluster-04:/etc/nginx# cat nginx-deployment2.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: nginx-deployment
  6. namespace: testns
  7. labels:
  8. zone: fjy
  9. nodetype: inward
  10. spec:
  11. replicas: 1
  12. selector:
  13. matchLabels:
  14. app: clay-nginx
  15. zone: fjy
  16. nodetype: inward
  17. template:
  18. metadata:
  19. labels:
  20. app: clay-nginx
  21. zone: fjy
  22. nodetype: inward
  23. spec:
  24. containers:
  25. - name: nginx
  26. image: nginx:1.24
  27. ports:
  28. - containerPort: 80
  29. volumeMounts:
  30. - name: nginx-config-volume
  31. mountPath: /etc/nginx/nginx.conf
  32. subPath: nginx.conf
  33. volumes:
  34. - name: nginx-config-volume
  35. configMap:
  36. name: nginx-config
  37. items:
  38. - key: nginx.conf
  39. path: nginx.conf
  40. (base) root@sd-cluster-04:/etc/nginx#

3、运行 nginx-deployment2.yaml,搭建Pod

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl apply -f nginx-deployment2.yaml
  2. deployment.apps/nginx-deployment created

查看Pod:

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl get pods -o wide -n testns
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. es-cluster-0 0/1 Terminating 0 64d 10.244.5.163 sd-cluster-02 <none> <none>
  4. mysql-deployment-66c4d975f5-zm4sz 1/1 Running 0 6d22h 10.244.0.212 sd-cluster-04 <none> <none>
  5. nginx-deployment-859449b97-bp4fz 1/1 Running 0 6m33s 10.244.0.82 sd-cluster-04 <none> <none>
  6. redis-deployment-f7d7dd455-xk7h8 1/1 Running 0 6d22h 10.244.0.215 sd-cluster-04 <none> <none>

查看标签: 

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl get pods -n testns --show-labels
  2. NAME READY STATUS RESTARTS AGE LABELS
  3. es-cluster-0 0/1 Terminating 0 64d app=es-cluster,chart=elasticsearch,controller-revision-hash=es-cluster-7c77895f7f,heritage=Helm,release=es-cluster,statefulset.kubernetes.io/pod-name=es-cluster-0
  4. mysql-deployment-66c4d975f5-zm4sz 1/1 Running 0 6d22h app=mysql,pod-template-hash=66c4d975f5
  5. nginx-deployment-859449b97-xd7x8 1/1 Running 0 19s app=clay-nginx,nodetype=inward,pod-template-hash=859449b97,zone=fjy
  6. redis-deployment-f7d7dd455-xk7h8 1/1 Running 0 6d21h app=redis,pod-template-hash=f7d7dd455

4、运行 nginx-service2.yaml,搭建Service服务

  1. (base) root@sd-cluster-04:/etc/nginx# cat nginx-service2.yaml # service2用于发布8888端口
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: nginx-service-2
  6. namespace: testns
  7. labels:
  8. app: clay-nginx
  9. zone: fjy
  10. nodetype: inward
  11. spec:
  12. type: NodePort
  13. selector:
  14. app: clay-nginx
  15. ports:
  16. - protocol: TCP
  17. port: 8888
  18. targetPort: 8888
  19. nodePort: 31275
  20. (base) root@sd-cluster-04:/etc/nginx# cat nginx-service3.yaml # service3用于发布80端口
  21. apiVersion: v1
  22. kind: Service
  23. metadata:
  24. name: nginx-service
  25. namespace: testns
  26. labels:
  27. app: clay-nginx
  28. zone: fjy
  29. nodetype: inward
  30. spec:
  31. type: NodePort
  32. selector:
  33. app: clay-nginx
  34. ports:
  35. - protocol: TCP
  36. port: 80
  37. targetPort: 80
  38. nodePort: 31273
  39. (base) root@sd-cluster-04:/etc/nginx#

5、运行nginx-service2.yaml 和 nginx-service3.yaml, 搭建Service服务

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl apply -f nginx-service2.yaml
  2. service/nginx-service-2 created
  3. (base) root@sd-cluster-04:/etc/nginx# kubectl apply -f nginx-service3.yaml
  4. service/nginx-service-3 created

查看Service:

  1. (base) root@sd-cluster-04:/etc/nginx# kubectl get service -o wide -n testns
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
  3. mysql-service NodePort 10.96.132.123 <none> 3306:30859/TCP 6d21h app=mysql
  4. nginx-service NodePort 10.96.44.105 <none> 80:31273/TCP 28m app=clay-nginx
  5. nginx-service-2 NodePort 10.96.77.236 <none> 8888:31275/TCP 28m app=clay-nginx
  6. redis-service NodePort 10.96.10.164 <none> 6379:30026/TCP 6d21h app=redis

6、验证访问:

访问nginx的代理服务:

访问mysql的代理服务:

修改的部分:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/196130
推荐阅读
相关标签
  

闽ICP备14008679号