ingress与ingress-controller小结

k8s之ingress

service的作用:体现在两个方面

  1. 对于集群内部,他不断跟踪pod的变化,更新endpoint中对应pod的对象、提供了ip不断变化的pod的服务发现的机制
  2. 对于集群外部,他类似负载均衡器,可以在集群内外部对pod进行访问
    ingress的作用:用于暴露集群内的service在网络节点上

kubernetes提供了下面的几种方式来访问集群内部的service:

  1. NodePort:

    • 将Service暴露在节点网络上
    • NodePort背后就是Kube-Proxy,Kube-Proxy是沟通Service网络、Pod网络和节点的桥梁
    • 一个NodePort端口只能对应一个服务、所以在几十上百的服务在集群中运行时、对NodePort端口管理就是一个灾难、所以在生产环境下一般不用NodePort(可使用的端口范围:30000-32767)
  2. LoadBalancer:

    • 只能用在云平台中
    • 通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址
    • 在Service提交后,kubernetes会调用CloudProvider在公有云上为创建一个负载均衡服务,并且把被代理的Pod的ip地址配置给负载均衡服务给后端
  3. externallIPs:

    • Service允许为其分配外部ip,如果外部ip路由到集群中一个或多个Node上,Service会被暴露给这些externallIPs
    • 通过外部ip进入到集群的流量,将会被路由到Service的EndPoint上
  4. Ingress:

    • 只需一个或者少量的公网ip和LB,就可以同时将多个HTTP服务暴露到外网、七层反向代理
    • 可以简单理解为Service的Service,实际就是一组域名和URL路径,把用户的请求按照规则转发到一个或多个service

Ingress 组件

ingress

ingress是一个API对象,通过对yaml文件来配置,ingress对象的作用是定义请求如何转发到service的规则、可以理解为配置模板
ingress通过http或https暴露集群内部的Service,给Service提供外部访问的URL、负载均衡、SSL/TLS能力以及基于域名的反向代理
ingress要依靠ingress-controller来集体事项以上的功能

ingress-controller (Ingress控制器-如ingress-nginx)

ingress-controller 是具体实现反向代理济负载均衡的程序、对ingress定义的yaml规则进行解析、根据ingress配置的yaml规则来进行请求的转发
ingress-controller 并不是k8s自带的组件、实际ingress-controller只是一个统称、用户可以选择不同的ingress-controller实现、目前由k8s维护的ingress-controller只有:

  • google云的GCE
  • ingress-nginx
    一般来说,ingress-controller的形式都是一个pod,里面跑着daemon程序和反向代理的程序
    daemon 负责不断监控集群的变化、根据ingress对象生成配置并应用新配置到反向代理,比如ingress-nginx就是动态生成nginx配置、动态更新upstream,并在需要的时候reload程序应用新配置

ingress-nginx 的github地址
ingress-nginx 的官网

小结:ingress-controller才是负责具体转发的组件、通过各种方式将它暴露在集群的入口、外部对集群的请求流量会先到ingress-controller,而ingress对象是用来告诉ingress-controller该如何转发这些请求、比如哪些域名、哪些URL要转发到哪些Service等等



Ingress 工作原理

  1. ingress-controller通过和kubernetes的API-server交互、动态的去感知集群中ingress规则的变化
  2. 然后去读取ingress规则,按照yaml文件中自定义的规则,规则就是写明了哪个域名对应哪个Service或者哪个路由,生成一段nginx的配置
  3. 将生产的nginx配置写到ingress-controller的pod里面,这个ingress-controller的pod里运行一个Nginx服务,控制器会把生成的nginx配置写入Nginx服务中的 /etc/nginx.conf 文件中
  4. 最后自动reload一下是配置生效、以此达到域名区分配置和动态更新的作用

Ingress 暴露Service的方式

  1. Deployment + LoadBalancer:

    如果要把ingress部署在公有云中,那用这种方式比较适合
    用Deployment部署ingress-controller ,创建一个type: LoadBalancer 的Service关联这组pod
    大部分公有云,都会为LoadBalancer的Service自动创建一个负载均衡器,通常还绑定了公网的地址、只要把域名解析指向该地址,就实现了集群服务的对外暴露
    缺点:不适用于高并发、大集群

  2. DaemonSet + HostNetwork + nodeSelector

    用DaemonSet结合nodeselector来部署ingress-controller 到特定的node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/443端口就能访问服务
    这时,ingress-controller所在的node机器就很类似传统架构的边缘节点、比如机房入口的nginx服务器
    该方式整个请求链路是最简单的,性能相对NodePort模式更好
    缺点:由于直接利用宿主机节点的网络和端口、导致一个node只能部署一个ingreess-controller pod
    比较适合大并发的生产环境使用

  3. Deployment + NodePort:

    用deployment模式部署ingress-controller,并创建对应的service,但是type:NodePort
    这样ingress就会暴露在集群节点ip的特定端口上
    由于nodeport暴露的端口是随机端口、一般会在前面再搭建一套负载均衡器来转发请求
    该方式适用于宿主机是相对固定的ip地址不变的情况下
    NodePort方式暴露ingress 虽然简单方便、但是NodePort多了一层NAT,在请求量极大时对性能有一定的影响
    缺点:对后期的维护难度加大、对流量转发压力也会变大、且对高并发支持不是很友好

流程图

客户端–>ingress-controller–>ingress(根据配置的路由规则)–>Service(找到对应的服务)–>pod(集群内通过service去访问pod或容器内的程序)

参考:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/



Ingress 配置部署

  1. 创建ingress-controller的Deployment:
  • ingress-nginx-controller.yaml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    apiVersion: v1
    automountServiceAccountToken: true
    kind: ServiceAccount
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx
    namespace: ingress-nginx
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission
    namespace: ingress-nginx
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx
    namespace: ingress-nginx
    rules:
    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - get
    - apiGroups:
    - ""
    resources:
    - configmaps
    - pods
    - secrets
    - endpoints
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - ""
    resources:
    - services
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - networking.k8s.io
    resources:
    - ingresses
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - networking.k8s.io
    resources:
    - ingresses/status
    verbs:
    - update
    - apiGroups:
    - networking.k8s.io
    resources:
    - ingressclasses
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - coordination.k8s.io
    resourceNames:
    - ingress-nginx-leader
    resources:
    - leases
    verbs:
    - get
    - update
    - apiGroups:
    - coordination.k8s.io
    resources:
    - leases
    verbs:
    - create
    - apiGroups:
    - ""
    resources:
    - events
    verbs:
    - create
    - patch
    - apiGroups:
    - discovery.k8s.io
    resources:
    - endpointslices
    verbs:
    - list
    - watch
    - get
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission
    namespace: ingress-nginx
    rules:
    - apiGroups:
    - ""
    resources:
    - secrets
    verbs:
    - get
    - create
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
    labels:
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx
    rules:
    - apiGroups:
    - ""
    resources:
    - configmaps
    - endpoints
    - nodes
    - pods
    - secrets
    - namespaces
    verbs:
    - list
    - watch
    - apiGroups:
    - coordination.k8s.io
    resources:
    - leases
    verbs:
    - list
    - watch
    - apiGroups:
    - ""
    resources:
    - nodes
    verbs:
    - get
    - apiGroups:
    - ""
    resources:
    - services
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - networking.k8s.io
    resources:
    - ingresses
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - ""
    resources:
    - events
    verbs:
    - create
    - patch
    - apiGroups:
    - networking.k8s.io
    resources:
    - ingresses/status
    verbs:
    - update
    - apiGroups:
    - networking.k8s.io
    resources:
    - ingressclasses
    verbs:
    - get
    - list
    - watch
    - apiGroups:
    - discovery.k8s.io
    resources:
    - endpointslices
    verbs:
    - list
    - watch
    - get
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission
    rules:
    - apiGroups:
    - admissionregistration.k8s.io
    resources:
    - validatingwebhookconfigurations
    verbs:
    - get
    - update
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx
    namespace: ingress-nginx
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: ingress-nginx
    subjects:
    - kind: ServiceAccount
    name: ingress-nginx
    namespace: ingress-nginx
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission
    namespace: ingress-nginx
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: ingress-nginx-admission
    subjects:
    - kind: ServiceAccount
    name: ingress-nginx-admission
    namespace: ingress-nginx
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
    labels:
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: ingress-nginx
    subjects:
    - kind: ServiceAccount
    name: ingress-nginx
    namespace: ingress-nginx
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: ingress-nginx-admission
    subjects:
    - kind: ServiceAccount
    name: ingress-nginx-admission
    namespace: ingress-nginx
    ---
    apiVersion: v1
    data:
    allow-snippet-annotations: "true"
    compute-full-forwarded-for: "true"
    forwarded-for-header: X-Forwarded-For
    use-forwarded-headers: "true"
    kind: ConfigMap
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-controller
    namespace: ingress-nginx
    ---
    apiVersion: v1
    kind: Service
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    annotations:
    service.cloud.tencent.com/local-svc-weighted-balance: "true"
    service.kubernetes.io/local-svc-only-bind-node-with-pod: "true"
    service.kubernetes.io/tke-existed-lbid: lb-jw7q1g74
    name: ingress-nginx-controller
    namespace: ingress-nginx
    spec:
    externalTrafficPolicy: Local
    ipFamilies:
    - IPv4
    ipFamilyPolicy: SingleStack
    ports:
    - appProtocol: http
    name: http
    port: 80
    protocol: TCP
    targetPort: http
    - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
    selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    type: LoadBalancer
    ---
    apiVersion: v1
    kind: Service
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-controller-admission
    namespace: ingress-nginx
    spec:
    ports:
    - appProtocol: https
    name: https-webhook
    port: 443
    targetPort: webhook
    selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-controller
    namespace: ingress-nginx
    spec:
    minReadySeconds: 0
    revisionHistoryLimit: 10
    selector:
    matchLabels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    template:
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    spec:
    imagePullSecrets:
    - name: docker-secret
    containers:
    - args:
    - /nginx-ingress-controller
    - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
    - --election-id=ingress-nginx-leader
    - --controller-class=k8s.io/ingress-nginx
    - --ingress-class=nginx
    - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
    - --validating-webhook=:8443
    - --validating-webhook-certificate=/usr/local/certificates/cert
    - --validating-webhook-key=/usr/local/certificates/key
    env:
    - name: POD_NAME
    valueFrom:
    fieldRef:
    fieldPath: metadata.name
    - name: POD_NAMESPACE
    valueFrom:
    fieldRef:
    fieldPath: metadata.namespace
    - name: LD_PRELOAD
    value: /usr/local/lib/libmimalloc.so
    image: ccr.gpdc.cloud.cn/library-images/nginx-ingress-controller:v1.8.1
    imagePullPolicy: IfNotPresent
    lifecycle:
    preStop:
    exec:
    command:
    - /wait-shutdown
    livenessProbe:
    failureThreshold: 5
    httpGet:
    path: /healthz
    port: 10254
    scheme: HTTP
    initialDelaySeconds: 10
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 1
    name: controller
    ports:
    - containerPort: 80
    name: http
    protocol: TCP
    - containerPort: 443
    name: https
    protocol: TCP
    - containerPort: 8443
    name: webhook
    protocol: TCP
    readinessProbe:
    failureThreshold: 3
    httpGet:
    path: /healthz
    port: 10254
    scheme: HTTP
    initialDelaySeconds: 10
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 1
    resources:
    requests:
    cpu: 100m
    memory: 90Mi
    securityContext:
    allowPrivilegeEscalation: true
    capabilities:
    add:
    - NET_BIND_SERVICE
    drop:
    - ALL
    runAsUser: 101
    volumeMounts:
    - mountPath: /usr/local/certificates/
    name: webhook-cert
    readOnly: true
    dnsPolicy: ClusterFirst
    nodeSelector:
    kubernetes.io/os: linux
    serviceAccountName: ingress-nginx
    terminationGracePeriodSeconds: 300
    volumes:
    - name: webhook-cert
    secret:
    secretName: ingress-nginx-admission
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission-create
    namespace: ingress-nginx
    spec:
    template:
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission-create
    spec:
    imagePullSecrets:
    - name: docker-secret
    containers:
    - args:
    - create
    - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc
    - --namespace=$(POD_NAMESPACE)
    - --secret-name=ingress-nginx-admission
    env:
    - name: POD_NAMESPACE
    valueFrom:
    fieldRef:
    fieldPath: metadata.namespace
    image: ccr.gpdc.cloud.cn/library-images/kube-webhook-certgen:v20230407
    imagePullPolicy: IfNotPresent
    name: create
    securityContext:
    allowPrivilegeEscalation: false
    nodeSelector:
    kubernetes.io/os: linux
    restartPolicy: OnFailure
    securityContext:
    fsGroup: 2000
    runAsNonRoot: true
    runAsUser: 2000
    serviceAccountName: ingress-nginx-admission
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission-patch
    namespace: ingress-nginx
    spec:
    template:
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission-patch
    spec:
    imagePullSecrets:
    - name: docker-secret
    containers:
    - args:
    - patch
    - --webhook-name=ingress-nginx-admission
    - --namespace=$(POD_NAMESPACE)
    - --patch-mutating=false
    - --secret-name=ingress-nginx-admission
    - --patch-failure-policy=Fail
    env:
    - name: POD_NAMESPACE
    valueFrom:
    fieldRef:
    fieldPath: metadata.namespace
    image: ccr.gpdc.cloud.cn/library-images/kube-webhook-certgen:v20230407
    imagePullPolicy: IfNotPresent
    name: patch
    securityContext:
    allowPrivilegeEscalation: false
    nodeSelector:
    kubernetes.io/os: linux
    restartPolicy: OnFailure
    securityContext:
    fsGroup: 2000
    runAsNonRoot: true
    runAsUser: 2000
    serviceAccountName: ingress-nginx-admission
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
    labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: nginx
    spec:
    controller: k8s.io/ingress-nginx
    ---
    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingWebhookConfiguration
    metadata:
    labels:
    app.kubernetes.io/component: admission-webhook
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    name: ingress-nginx-admission
    webhooks:
    - admissionReviewVersions:
    - v1
    clientConfig:
    service:
    name: ingress-nginx-controller-admission
    namespace: ingress-nginx
    path: /networking/v1/ingresses
    failurePolicy: Fail
    matchPolicy: Equivalent
    name: validate.nginx.ingress.kubernetes.io
    rules:
    - apiGroups:
    - networking.k8s.io
    apiVersions:
    - v1
    operations:
    - CREATE
    - UPDATE
    resources:
    - ingresses
    sideEffects: None
    1
    2
    安装:kubectl apply -f ingress-nginx.yaml
    查看:kubectl get pod -n ingress-nginx
  1. 创建 Ingress 资源:
    ingress.yaml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: ingress-rule
    namespace: ops-system
    annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/send-timeout: "600"
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-methods: "*"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/proxy-body-size: "1024m"
    spec:
    tls:
    - hosts:
    - {IP_OR_DOMAIN} # 修改如果不写域名可以去掉、默认就是接受所有ip进来的流量
    secretName: ops-tls-secret
    rules:
    - http:
    paths:
    - path: '/'
    pathType: Prefix
    backend:
    service:
    name: ops-webui-svc
    port:
    number: 80
    - path: '/images'
    pathType: Prefix
    backend:
    service:
    name: ops-webui-svc
    port:
    number: 80
    - path: '/static'
    pathType: Prefix
    backend:
    service:
    name: ops-webui-svc
    port:
    number: 80
    - path: '/models'
    pathType: Prefix
    backend:
    service:
    name: ops-webui-svc
    port:
    number: 80
    - path: '/fonts'
    pathType: Prefix
    backend:
    service:
    name: ops-webui-svc
    port:
    number: 80
    - path: '/iconfont'
    pathType: Prefix
    backend:
    service:
    name: ops-webui-svc
    port:
    number: 80
    - path: '/diffhtml/css_js'
    pathType: Prefix
    backend:
    service:
    name: ops-static-svc
    port:
    number: 80
    - path: '/data/key_cfg_compare/export'
    pathType: Prefix
    backend:
    service:
    name: ops-static-svc
    port:
    number: 80
    - path: '/api'
    pathType: Prefix
    backend:
    service:
    name: iam-svc
    port:
    number: 8888
    - path: '/asset'
    pathType: Prefix
    backend:
    service:
    name: kong-svc
    port:
    number: 8000
    - path: '/ops-manage/ws'
    pathType: Prefix
    backend:
    service:
    name: kong-svc
    port:
    number: 8000
    - path: '/ops-manage'
    pathType: Prefix
    backend:
    service:
    name: kong-svc
    port:
    number: 8000
    - path: '/ops-elink'
    pathType: Prefix
    backend:
    service:
    name: kong-svc
    port:
    number: 8000
    - path: '/ops-metrics'
    pathType: Prefix
    backend:
    service:
    name: kong-svc
    port:
    number: 8000

    1
    2
    3
    4
    创建:kubectl apply -f ingress.yaml
    查看:kubectl get ingress -n ops-system
    kubectl describe ingress-nginx -n ops-system