在此我们不讲述如何部署ingress-controller,只演示如何使用ingress之nginx使用。主要演示如何使用ingress nginx实现我们nginx的多样化配置
案例1:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress namespace: test annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/use-regex: "true" spec: tls: - hosts: - nginx-a.gogen.cn secretName: gogen.cn rules: - host: nginx-a.gogen.cn http: paths: - path: / backend: serviceName: nginx-a servicePort: 80 - path: /.*.(txt|css|doc) backend: serviceName: nginx-b servicePort: 80 - path: /(api|app)/ backend: serviceName: nginx-c servicePort: 80 - path: /api backend: serviceName: nginx-d servicePort: 80
上面我们定义了一个ingress,并指定运行在test名称空间(此名名称空间需要自行创建)。后端我们定义了四组服务,分别为:nginx-a,nginx-b,nginx-c和nginx-d,并指定服务的port为80(这四组服务也需要自行定义)。
然后我们ingress的主要配置里面我们定义了tls证书,并指定可使用的host和需要使用的secret。我们是将证书先导入进secret,然后直接引用secret,导入方法如下:
kubectl create secret tls gogen.cn --cert=1592339__gogen.cn.pem --key=1592339__gogen.cn.key -n test
tls: - hosts: #此为固定项,是一个列表,我们可以有另外的证书对应其它域名 - nginx-a.gogen.cn #此为列表,必须为一个域名,一个secret可以对多个域名 secretName: gogen.cn #创建secret时指定的名称
annotations配置
# 指定了我们使用后端ingress controller的类别,如果后端有多个ingress controller的时候很重要 kubernetes.io/ingress.class: "nginx" # 指定我们的rules的path可以使用正则表达式,如果我们没有使用正则表达式,此项则可不使用 nginx.ingress.kubernetes.io/use-regex: "true"
rules配置