Ingress
Ingress-Nginx github地址: https://github.com/kubernetes/ingress-nginx
Ingress-Nginx 官网:https://kubernetes.github.io/ingress-nginx/
image.png
nginx 一般以 NoPort 形式部署

部署Ingress-Nginx

  1. # 创建文件夹
  2. mkdir -p /usr/local/install-k8s/plugin/ingress
  3. cd /usr/local/install-k8s/plugin/ingress
  4. # 下载 yaml文件,这里下载失败,网上复制新建文件粘贴解决
  5. # 创建
  6. kubectl apply -f mandatory.yaml
  7. # 创建以下文件,然后执行
  8. kubectl apply -f service-nodeport.yaml

service-nodeport.yaml 文件

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: ingress-nginx
  5. namespace: ingress-nginx
  6. labels:
  7. app.kubernetes.io/name: ingress-nginx
  8. app.kubernetes.io/part-of: ingress-nginx
  9. spec:
  10. type: NodePort
  11. ports:
  12. - name: http
  13. port: 80
  14. targetPort: 80
  15. protocol: TCP
  16. - name: https
  17. port: 443
  18. targetPort: 443
  19. protocol: TCP
  20. selector:
  21. app.kubernetes.io/name: ingress-nginx
  22. app.kubernetes.io/part-of: ingress-nginx

执行完以上操作后,nginx就被对外暴露了

Ingress HTTP 代理访问

deployment、service、Ingress Yaml 文件

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-dm
  5. spec:
  6. replicas: 2
  7. template:
  8. metadata:
  9. labels:
  10. name: nginx
  11. spec:
  12. containers:
  13. - name: nginx
  14. image: wangyanglinux/myapp:v1
  15. imagePullPolicy: IfNotPresent
  16. ports:
  17. - containerPort: 80
  18. ---
  19. apiVersion: v1
  20. kind: Service
  21. metadata:
  22. name: nginx-svc
  23. spec:
  24. ports:
  25. - port: 80
  26. targetPort: 80
  27. protocol: TCP
  28. selector:
  29. name: nginx
  30. ---
  31. apiVersion: extensions/v1beta1
  32. kind: Ingress
  33. metadata:
  34. name: nginx-test
  35. spec:
  36. rules:
  37. - host: www1.atguigu.com
  38. http:
  39. paths:
  40. - path: /
  41. backend:
  42. serviceName: nginx-svc
  43. servicePort: 80

Ingress HTTPS 代理访问

创建证书,以及cert 存储方式

  1. openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
  2. kubectl create secret tls tls-secret --key tls.key --cert tls.crt

deployment、Service、Ingress Yaml文件

  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: nginx-test
  5. spec:
  6. tls:
  7. - hosts:
  8. - foo.bar.com
  9. secretName: tls-secret
  10. rules:
  11. - host: foo.bar.com
  12. http:
  13. paths:
  14. - path: /
  15. backend:
  16. serviceName: nginx-svc
  17. servicePort: 80

Nginx 进行 BasicAuth

  1. yum -y install httpd
  2. htpasswd -c auth foo # 文件为 auth, 用户名为 foo ,设置密码为:123456
  3. kubectl create secret generic basic-auth --from-file=auth
  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: ingress-with-auth
  5. annotations:
  6. nginx.ingress.kubernetes.io/auth-type: basic
  7. nginx.ingress.kubernetes.io/auth-secret: basic-auth
  8. nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required-foo'
  9. spec:
  10. rules:
  11. - host: foo2.bar.com
  12. http:
  13. paths:
  14. - path: /
  15. backend:
  16. serviceName: nginx-svc
  17. servicePort: 80

Nginx 进行重写

名称 描述
nginx.ingress.kubernetes.io/rewrite-target -必须重定向流量的目标URI
nginx.ingress.kubernetes.io/ssl-redirect 指示位置部分是否仅可访问SSL(当lngress包含证书时默认为True 布尔
nginx.ingress.kubernetes.io/force-ssl-redirect 即使ingress未启用TLS,也强制重定向到HTTPS 布尔
nginx.ingress.kubernetes.io/app-root 定义Controller必须重定向的应用程序根,如果它在 ‘/ ‘上下文中
nginx.ingress.kubernetes.io/use-regex 指示Ingres上定义的路径是否使用正则表达式 布尔
  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: nginx-test
  5. annotations:
  6. nginx.ingress.kubernetes.io/rewrite-target: http://foo.bar.com:31795/hostname.html
  7. spec:
  8. rules:
  9. - host: foo10.bar.com
  10. http:
  11. paths:
  12. - path: /
  13. backend:
  14. serviceName: nginx-svc
  15. servicePort: 80