第九课 Kubernetes生产级实践-Ingress-Nginx、共享存储和KubernetsAPI

本文深入探讨Kubernetes的Ingress-Nginx配置,包括四层代理、TLS证书配置及访问控制。同时讲解了共享存储的使用,如PV、PVC和StorageClass,并介绍了StatefulSet在有状态应用中的应用,确保顺序性和持久存储。
摘要由CSDN通过智能技术生成

第九课 Kubernetes生产级实践-Ingress-Nginx、共享存储和KubernetsAPI

tags:

  • k8s
  • 慕课网

categories:

  • 定制配置
  • 定向流量控制
  • 共享储存
  • StatefulSet
  • KubernetsAPI了解

第一节 深入Ingress-Nginx

1.1 Ingress-Nginx的补充学习

  1. Deployment管理Ingress-Nginx是否非常合适?节点变化控制是否方便?
  2. 四层代理 对外提供的是tcp服务而不是http服务如何做 服务发现呢?
  3. 定制配置 调整Nginx的配置
  4. Https 如何配置证书呢
  5. 访问控制 如果有session保持怎么完成 能不能做小流量?能不能支持AB测试?

1.2 DaemonSet修改Ingress-Nginx

  1. Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。
  2. 使用DaemonSet的好处,我们不用管随机生成的副本,想在哪个执行机上执行只要打个标签即可。如果使用Deployment每次增加减少都要考虑副本数。
# 查看之前ingress-nginx deployment具体信息
kubectl get deploy -n ingress-nginx nginx-ingress-controller -o yaml
# 用Demonset控制尝试修改ingress-nginx 先给它重新命名
kubectl get deploy -n ingress-nginx nginx-ingress-controller -o yaml > nginx-ingress-controller.yaml
# 修改它 
# 1. 修改Deployment为DaemonSet 
# 2. 删除注释annotations 以及一些看着不顺眼的生成。删除progressDeadlineSeconds
# 3. 删除replicas副本数,因为不需要。
# 4. 修改strategy为updateStrategy。去掉最大激增数maxSurge(最多可以比replicas预先设定值多出的pod数量)
# 5. 删除status下面没什么用。在文件最下面
vim nginx-ingress-controller.yaml
# 删除之前的服务使用修改后的配置
kubectl delete  deploy -n ingress-nginx nginx-ingress-controller
kubectl apply -f nginx-ingress-controller.yaml
# 发现运行在s2上 测试下之前的服务http://tomcat.mooc.com/ 发现没问题
kubectl get pod  -n ingress-nginx -o wide

# 优势: 如果我想在s1上也跑一个nginx-ingress-controller 只需要打一个标签就行。注意这里会在node上开80端口奥
kubectl label node s1 app=ingress
kubectl get pod  -n ingress-nginx -o wide
# 删除标签自动停掉之前的s1的pod 还原环境
kubectl label node s1 app-
kubectl get pod  -n ingress-nginx -o wide

1.3 Ingress-Nginx的四层代理

  1. TCP服务如何用Ingress-Nginx做服务发现。
# 首先,看下它的ConfigMap 其中有一项是tcp-service。它是在部署时创建的。
kubectl get cm -n ingress-nginx
kubectl get cm -n ingress-nginx -o yaml

# 使用配置文件tcp-config.yaml 30000是我要暴露的执行机的对外端口 后面是暴露的服务
# dev命名空间下web-demo服务的80端口
apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  "30000": dev/web-demo:80

kubectl apply -f tcp-config.yaml
# 查看执行机是否监听30000
netstat -ntlp|grep 30000
# 直接通过ip+端口访问测试 这种方式很简单 主要用来测试一些东西方便
http://192.168.242.131:30000/

1.4 Ingress-Nginx的定制配置

  1. 自定义配置-改一些配置参数
# 进入到容器中
docker ps | grep ingress-nginx
docker exec -it e45667e1185b bash
# 查看nginx的配置文件
ps -ef | grep nginx
more /etc/nginx/nginx.conf
# 1. 这里通过ConfigMap修改一些配置参数 具体可以修改的参数参考github官网:https://github.com/kubernetes/ingress-nginx
# 详细用法:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
data:
  proxy-body-size: "64m"
  proxy-read-timeout: "180"
  proxy-send-timeout: "180"
  
# 应用全局配置查看是否生效
kubectl apply -f nginx-config.yaml
docker exec -it e45667e1185b bash
# 这里字段可能不完全一样 可以去上面地址文档查询
more /etc/nginx/nginx.conf
  1. 自定义配置-定义全局的header
# 2. 自定义全局的header
apiVersion: v1
kind: ConfigMap
data:
  proxy-set-headers: "ingress-nginx/custom-headers"
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
data:
  X-Different-Name: "true"
  X-Request-Start: t=${msec}
  X-Using-Nginx-Controller: "true"
metadata:
  name: custom-headers
  namespace: ingress-nginx

# 测试一下
kubectl apply -f custom-header-global.yaml
docker exec -it 15b497b1108e bash
more /etc/nginx/nginx.conf
  1. 自定义配置-自定义ingress下的header-
# 3. 自定义ingress下的header nginx.ingress.kubernetes.io/configuration-snippet
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "Request-Id: $req_id";
  name: web-demo
  namespace: dev
spec:
  rules:
  - host: web-dev.mooc.com
    http:
      paths:
      - backend:
          serviceName: web-demo
          servicePort: 80
        path: /

# 测试一下
kubectl create -f custom-header-global.yaml
docker exec -it 15b497b1108e bash
more /etc/nginx/nginx.conf
  1. 自定义配置-配置模板
# 4. 如果上面满足不了个人配置, 可以到官网查询配置模板 nginx配置是通过配置文件通过程序生成的
# https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/custom-template/
vi nginx-ingress-controller.yaml
# 修改 加上这个
        - --annotations-prefix=nginx.ingress.kubernetes.io
        volumeMounts:
          - mountPath: /etc/nginx/template
            name: nginx-template-volume
            readOnly: true
# volume一级在最后
      terminationGracePeriodSeconds: 30
      volumes:
        - name: nginx-template-volume
          configMap:
            name: nginx-template
            items:
            - key: nginx.tmpl
              path: nginx.tmpl

# 到Node节点从容器目录拿出配置模板文件,穿给主节点
docker cp 15b497b1108e:/etc/nginx/template/nginx.tmpl .
scp nginx.tmpl root@m1:~
# 到m1节点 通过模板创建ConfigMap
mv ~/nginx.tmpl .
kubectl create cm nginx-template --from-file nginx.tmpl -n ingress-nginx
kubectl get cm  -n ingress-nginx 
kubectl get cm  -n ingress-nginx nginx-template -o yaml
# 创建成功cm 后重新创建nginx-ingress-controller
kubectl apply -f nginx-ingress-controller.yaml
docker logs 6dd6e5c276ef
docker exec -it 6dd6e5c276ef bash
# 大部分设置都是可以修改的 随便修改一个types_hash_max_size 4096;
kubectl edit cm -n ingress-nginx nginx-template
docker exec -it 18a9f76b0035  bash
more /etc/nginx/nginx.conf

1.5 TSL配置HTTPS的配置

  1. 编写一个脚本生成证书,然后创建一个secret。

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值