Kubernetes(k8s)ingress-Nginx

Ingress

Ingress为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机,在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。

基本概念

在Kubernetesv 1.1版中添加的Ingress用于从集群外部到集群内部Service的HTTP和HTTPS路由,流量从Internet到Ingress再到Services最后到Pod上,通常情况下,Ingress部署在所有的Node节点上。
Ingress可以配置提供服务外部访问的URL、负载均衡、终止SSL,并提供基于域名的虚拟主机。但Ingress不会暴露任意端口或协议。

Ingress安装

首先安装helm管理工具:https://helm.sh/docs/intro/install/

下载 需要的版本
解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)
然后就可以执行客户端程序并 添加稳定仓库: helm help.

使用helm安装ingress:https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
1.添加ingress的helm仓库(课程讲解的版本已经上传至百度网盘)

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

2.下载ingress的helm包至本地

helm pull ingress-nginx/ingress-nginx(如已从网盘下载,省略此步骤)

3.更改对应的配置

tar xf ingress-nginx-3.6.0.tgz
cd ingress-nginx
vim values.yaml

4.需要修改的位置

a)Controller和admissionWebhook的镜像地址,需要将公网镜像同步至公司内网镜像仓库(https://blog.csdn.net/weixin_39961559/article/details/80739352,或者参考这个连接: https://blog.csdn.net/sinat_35543900/article/details/103290782)
Controller镜像地址:registry.cn-beijing.aliyuncs.com/dotbalo/controller
admissionWebhook镜像地址:registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook-certgen
b)hostNetwork设置为true
c)dnsPolicy设置为 ClusterFirstWithHostNet
d)类型更改为kind: DaemonSet
e)type: ClusterIP
f)nodeSelector:
    kubernetes.io/os: linux
    ingress: "true"
  1. 部署ingress
给需要部署ingress的节点上打标签
kubectl label node k8s-master03 ingress=true
kubectl create ns ingress-nginx
helm install ingress-nginx -n ingress-nginx .
  1. 将ingress controller部署至Node节点(ingress controller不能部署在master节点,需要安装视频中的步骤将ingress controller部署至Node节点,生产环境最少三个ingress controller,并且最好是独立的节点)
kubectl label node k8s-node01 ingress=true  #添加标签
kubectl label node k8s-master03 ingress-    #取消标签

Ingress使用

创建一个ingress:

# cat ingress.yaml 
apiVersion: networking.k8s.io/v1beta1 # networking.k8s.io/v1 / extensions/v1beta1 
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
  name: example
spec:
  rules: # 一个Ingress可以配置多个rules
  - host: foo.bar.com # 域名配置,可以不写,匹配*, *.bar.com
    http:
      paths: # 相当于nginx的location配合,同一个host可以配置多个path / /abc
      - backend:
          serviceName: nginx-svc 
          servicePort: 80
        path: /

创建一个多域名ingress

cat ingress-mulDomain.yaml 
apiVersion: networking.k8s.io/v1beta1 # networking.k8s.io/v1 / extensions/v1beta1 
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
  name: example
spec:
  rules: # 一个Ingress可以配置多个rules
  - host: foo.bar.com # 域名配置,可以不写,匹配*, *.bar.com
    http:
      paths: # 相当于nginx的location配合,同一个host可以配置多个path / /abc
      - backend:
          serviceName: nginx-svc 
          servicePort: 80
        path: /
  - host: foo2.bar.com # 域名配置,可以不写,匹配*, *.bar.com
    http:
      paths: # 相当于nginx的location配合,同一个host可以配置多个path / /abc
      - backend:
          serviceName: nginx-svc-external
          servicePort: 80
        path: /

你可能感兴趣的:(Kubernetes(k8s)ingress-Nginx)