k8s ingress yaml详解 k8s ingress部署_kubernetes

之前我们提到并配置过ingress-nginx,算是入了门了,那么我们有没有想过,我们之前的ingress-nginx只在一个worker节点上运行的,那么我们如何在多个worker节点上运行,以及如何使用ingress-nginx代理4层协议,如何使用ingress-nginx访问https呢?是不是都需要掌握啊,本文我们就来详细说下。

k8s ingress yaml详解 k8s ingress部署_nginx_02

1

ingress-nginx部署方式

我们最开始部署的时候,采用的就是daemonset的方式,这里倒是不需要改变了,如果你是从官网,或者其他地方安装的,这里可以修改成daemonset的方式,那么我们如何给每个节点都部署上去呢?先看下现在的状态;

[root@node1 ~]# kubectl get all -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
pod/default-http-backend-86dcdf4845-gfwn8   1/1     Running   3          2d22h
pod/nginx-ingress-controller-7k66x          1/1     Running   0          36m

NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/default-http-backend   ClusterIP   10.233.198.54   <none>        80/TCP    7d2h

NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/nginx-ingress-controller   1         1         1       1            1           app=ingress     7d2h

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/default-http-backend   1/1     1            1           7d2h

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/default-http-backend-86dcdf4845   1         1         1       7d2h
[root@node1 ~]#

从上面可以看到,我们的nginx-ingress-controller就是daemonset方式,且只有一个节点,我们如何保证每个节点都安装上呢?

可以看到我们这个daemonset上打了一个标签,我们只需要在需要安装ingress-nginx的节点上配置标签,就可以了,我们验证下看看。

[root@node1 ~]# kubectl get node --show-labels
NAME    STATUS   ROLES    AGE   VERSION   LABELS
node2   Ready    <none>   30d   v1.20.2   app=ingress,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux,nihao=wohao,yunweijia=True
node3   Ready    <none>   30d   v1.20.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceshi2=yunweijia,kubernetes.io/arch=amd64,kubernetes.io/hostname=node3,kubernetes.io/os=linux
[root@node1 ~]#

从上面可以看到node2节点上有标签,app=ingress,所以这个daemonset会在node2上,那么我们给node3也配置个标签试试呢?

[root@node1 ~]# kubectl label node node3 app=ingress
node/node3 labeled
[root@node1 ~]# kubectl get node node3 --show-labels
NAME    STATUS   ROLES    AGE   VERSION   LABELS
node3   Ready    <none>   30d   v1.20.2   app=ingress,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ceshi2=yunweijia,kubernetes.io/arch=amd64,kubernetes.io/hostname=node3,kubernetes.io/os=linux
[root@node1 ~]#

这样子就给节点打上了一个app=ingress的标签,我们再看下ingree-nginx的daemonset变化;

[root@node1 ~]# kubectl get all -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
pod/default-http-backend-86dcdf4845-gfwn8   1/1     Running   3          2d22h
pod/nginx-ingress-controller-7k66x          1/1     Running   0          54m
pod/nginx-ingress-controller-bcjf8          1/1     Running   0          7m30s

NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/default-http-backend   ClusterIP   10.233.198.54   <none>        80/TCP    7d2h

NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/nginx-ingress-controller   2         2         2       2            2           app=ingress     7d2h

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/default-http-backend   1/1     1            1           7d2h

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/default-http-backend-86dcdf4845   1         1         1       7d2h
[root@node1 ~]#

看到数量变成了两个,这样子我们后续扩展就方便多了。

2

配置4层代理

我们看下ingress-nginx自带的configmap文件;

[root@node1 ~]# kubectl get cm -n ingress-nginx
NAME                              DATA   AGE
ingress-controller-leader-nginx   0      7d2h
kube-root-ca.crt                  1      7d2h
nginx-configuration               0      7d2h
tcp-services                      0      7d2h
udp-services                      0      7d2h
[root@node1 ~]#

我们来看下tcp-service的具体内容;

[root@node1 ~]# kubectl get cm -n ingress-nginx tcp-services -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"ingress-nginx","app.kubernetes.io/part-of":"ingress-nginx"},"name":"tcp-services","namespace":"ingress-nginx"}}
  creationTimestamp: "2022-04-12T11:50:34Z"
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:kubectl.kubernetes.io/last-applied-configuration: {}
        f:labels:
          .: {}
          f:app.kubernetes.io/name: {}
          f:app.kubernetes.io/part-of: {}
    manager: kubectl-client-side-apply
    operation: Update
    time: "2022-04-12T11:50:34Z"
  name: tcp-services
  namespace: ingress-nginx
  resourceVersion: "469519"
  uid: abea366f-9805-4672-81b3-af55a5c922c1
[root@node1 ~]#

然后我们来手工配置一个tcp代理的yaml文件;