[转帖]Kubernetes - nginx-ingress 配置跳坑指南

Kubernetes - nginx-ingress 配置跳坑指南


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qingyafan/article/details/82692509

主要是有转发相关的东西. 
 

Ingress是Kubernetes集群对外暴露服务的一种方式,Ingress作为一个抽象对象,定义了进入集群的流量的导向,可以视为router,真正处理流量,作为ingress和集群中微服务中介的称之为Ingress Controller,有许多种Controller可供选择,有Kubernetes官方维护的Nginx Ingress Controller,比较常用的还有Traefik Ingress ControllerKong Ingress Controller,这里我们使用的是Nginx Ingress Controller

简单配置

Ingress有一个规则配置文件,nginx的反向代理的配置文件就是通过Ingress配置的规则生成的,格式像下面这样(test.yaml):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /service/
        backend:
          serviceName: app1
          servicePort: 

执行kubectl apply -f test.yaml,通过example.com/app1/就可以访问到app1的/service/目录,这里需要注意,app1中需要定义/service/路由,否则会出现错误,以上的配置文件最终的nginx规则是:

example.com/service/ --> app1:8080/

Attention !!!

host可以不指定

host指定域名,如果指定,那么只能通过域名访问,如果不指定,则通过域名或者其他方式(只要可以转发到集群的node节点的80端口),都可以访问。

path只能转到应用的根目录

例如上面的path定义生成的规则是: host.example.com/service/ ⇒ app1:8080/。如果app1中服务路由并不是定义在根目录(/),假设我们的实际情况是: host.example.com/service/ ⇒ app1:8080/s1/,那么则需要做一个rewrite:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /service/(.*)  /s1/$ break;
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /service/
        backend:
          serviceName: app1
          servicePort: 

路径中支持正则表达式

高级配置

Ingress背后是Nginx,所以Nginx能实现的Ingress同样可以实现,但是实现方式不太一样,基本都是通过annotations实现的,各种配置可以参考文档: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md 。

配置HTTPS

首先创建一个secret资源,来存储秘钥和证书。如果你的证书是.pem的,也是一样的,将下面的your_cert.crt改为your_cert.pem即可。

kubectl create secret tls tls_secret_name --key your_key.key --cert your_cert.crt

或者:

apiVersion: v1
kind: Secret
metadata:
  name:  tls_secret_name
  namespace: default
data:
  tls.crt: your-k8s-ing.crt
  tls.key: your-k8s-ing.key
type: kubernetes.io/tls

然后在Ingress的配置文件中配置使用tls: kubectl apply -f ingress.yaml,即可。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /service/(.*) /v1/$ break;
spec:
  tls:
    - hosts:
      - example.com
      secretName: tls_secret_name
  rules:
  - host: example.com
    http:
      paths:
      - path: /v1/
        backend:
          serviceName: app1
          servicePort: 

总结

本文主要介绍了nginx版本的Ingress的配置。

上一篇:deep learning 练习1 线性回归练习


下一篇:基于canvas+ajax+zui.js的蓄电池监控系统