K8S简历(九)

今天我把Ingress资源的来龙去脉整的七七八八,总结一句:K8S总能给我带来一些新花样。


Ingress流程图
  1. 流量先从nodePort进入K8S集群,分发到由DaemonSet控制的Ingress资源(Pod)。
  2. 这里需要注意的是Ingress不会把请求发送到sevice而是直接发送到后端Pod。
  3. 后端Pod收到请求,把所需资源提供给客户。

那问题来了,大家都知道Pod是有生命周期的,Pod的地址是会变化的Ingress是怎么获取最新Pod的地址的呢?
从图中可以看到后端Pod是有service的,但这个service不提供流量转发功能只为Ingress提供最新Pod的状态信息,Ingress再通过这些回调信息动态更改Ingress中的容器配置信息(nginx等..)

实验流程(无TLS):

第一步:

我们先把后端的Pod先建立起来。

apiVersion: apps/v1
kind: Deployment
mentadata:
  name: nginx-backend
  namespace: default
spec:
  replicas: 3
  selector:
    matchlables:
      app: nginx
      version: v1.21
 template:
    mentadata:
      labels:
        app: nginx
        version: v1.21
    spec:
      containers:
      - name: nginx
        image: wlzyr/nginx:v1.21
        ports:
          name: nginx
          containersPort: 80

第二步:

把后端Pod建完后,我们开始建负载管理后端Pod的service。

apiVersion: v1
kind: service
metadata:
  name: nginx-svc
  namespace: default
spec:
  selector:
    app: nginx
    version: v1.21
  ports:
    port: 80
    targetPort: 80

第三步:

配置Ingress的前提需要先去把https://github.com/kubernetes/ingress-nginx/blob/master/deploy/static/mandatory.yaml下载并启动,启动完就可以编写Ingress了。

apiVersion:extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-Ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
   rules:
    - host: www.wl.com
      http:
        paths:
          - path:
            backend:
              serviceName: nginx-svc
              servicePort: 80

第四步:

创建nodePort。
下载启动https://github.com/kubernetes/ingress-nginx/blob/master/deploy/baremetal/service-nodeport.yaml即可。
需要注意的这个yaml中没指定节点的端口会随机分配需要手动查看(hostPort手动指定)。
这就是创建最简单的Ingress的过程。

实验流程(TLS)

第一步:

和无TLS差不多先创建Pod。

apiVersion: apps/v1
kind: Deployment
mentadata:
  name: tomcat-de
  namespace: default
spec:
  selector:
    matchlables:
      app: tomcat-de
      version: v1.1
  template:
    metadata:
      labels:
        app: nginx
        version: v1.1
    containers:
     - name: tomcat
       image: tomcat
       ports:
       - name: tomcat
         containersPort: 8080

第二步:

创建service。

apiVersion: apps/v1
kind: service
mentadata:
  name: tomcat-svc
  namespace: default
spec:
   selector:
      app: tomcat
      version: v1.1
  ports:
    - name: tomcat
      targetPort: 8080
      protr: 8080

第三步:

创建TLS的key&secret。

openssl ganrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=www.zyr.com
kubectl create secret tls tomcat-tls --cert=tls.crt --key=tls.key
#创建名为tomcat-tls的secret ;--cert=tls.crt --key=tls.key指定tls文件

第四步:

创建Ingress。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec: 
  tls:
  - host: 
   - www.zyr.com
   secretName: tomcat-tls
  ruls:
  - host: www.zyr.com
    http:
      paths:
       - path:
         backend:
          serviceName: tomcat-svc
          servicePort: 8080

第五步

创建nodePort,其内容和第一个实验里的一样。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容