一、基于TLS的Ingress

生产环境的域名大部分都是HTTPS的,Ingress也支持HTTPS类型的域名。首先创建证书,生产环境的证书为公司购买的证书:

$ k -n default create secret tls nginx-test-tls --key=tls.key --cert=tls.crt

定义Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tls-example-ingress
spec:
  tls:
  - hosts:
      - https-example.foo.com
    secretName: testsecret-tls
  rules:
  - host: https-example.foo.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

二、更新Ingress

更新Ingress可以直接使用kubectl edit进行更改,也可以通过kubectl apply/replace进行更改。

2.1 在线编辑更新

要更新现有的 Ingress可以通过编辑资源来对其进行更新:

$ k edit ingress ingress-name

2.2 Yaml文件更新

要更新现有的 Ingress可以通过编辑yaml文件来对其进行更新:

$ k replace/apply -f new-ingress.yaml

三、Ingress接口变化解析

1.19 之前的 v1beta1

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-example
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: foo.bar.com
      http:
        paths:
          - path: /foo
            pathType: Prefix
            backend:
              serviceName: service1
              servicePort: 80
          - path: /bar
            pathType: ImplementationSpecific
            backend:
              serviceName: service2
              servicePort: 8080

1.19之后的v1

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service1
            port:
              number: 80

二者之间的区别:

特性 v1beta1 v1
API 版本 Kubernetes 1.19 之前,已弃用 Kubernetes 1.19 及之后,稳定版本
pathType 字段 不支持,默认为 Prefix 支持 PrefixExactImplementationSpecific
后端服务定义 serviceNameservicePort service.nameservice.port.number
默认行为 宽松,默认路径匹配为 Prefix 严格,要求明确指定 pathType
兼容性 Kubernetes 1.19 之前 Kubernetes 1.19 及之后