一、基于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 |
支持 Prefix、Exact、ImplementationSpecific |
| 后端服务定义 | serviceName 和 servicePort |
service.name 和 service.port.number |
| 默认行为 | 宽松,默认路径匹配为 Prefix |
严格,要求明确指定 pathType |
| 兼容性 | Kubernetes 1.19 之前 | Kubernetes 1.19 及之后 |