ingress-nginx安装
ingress说明
Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。
下面是 Ingress 的一个简单 示例,可将所有流量都发送到同一 Service
通过配置,Ingress 可为 Service 提供外部可访问的 URL、对其流量作负载均衡、 终止 SSL/TLS,以及基于名称的虚拟托管等能力。 Ingress 控制器 负责完成 Ingress 的工作,具体实现上通常会使用某个负载均衡器, 不过也可以配置边缘路由器或其他前端来帮助处理流量。
Ingress 不会随意公开端口或协议。 将 HTTP 和 HTTPS 以外的服务开放到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的 Service。
ingress控制器说明
为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。
与作为 kube-controller-manager
可执行文件的一部分运行的其他类型的控制器不同, Ingress 控制器不是随集群自动启动的。 基于此页面,你可选择最适合你的集群的 ingress 控制器实现。
Kubernetes 作为一个项目 ,目前支持和维护 AWS、 GCE 和 Nginx Ingress 控制器。
ingress-nginx是ingress控制器中的一种,其他类型的ingress控制器可以参考 官方文档
ingress-nginx安装
裸机注意事项
在云环境中,部署ingress-nginx的时候,我们一般会选择创建一个loadbalancer类型的svc,同时也会创建一个相应的lb,以此来作为对外的统一入口,但是部署在裸机服务器上的 Kubernetes 集群,以及使用通用 Linux 发行版(如 CentOS、Ubuntu...)手动安装 Kubernetes 的 原始
VM ,这种环境下需要不同的设置才能像云环境中那样提供相同类型的访问
云环境中会有
VM环境
解决方案
安装
安装ingress-nginx
添加helm仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
下载安装包
helm pull ingress-nginx/ingress-nginx
解压缩
tar xf ingress-nginx-4.8.4.tgz && cd ingress-nginx
修改 values.yaml
由 于某些特殊原因,无法访问 registry.k8s.io
,我们可以使用 ucloud 提供的镜像加速解决
修改 values.yaml
中所有 registry.k8s.io
安装
helm upgrade --install ingress-nginx -n ingress-nginx --create-namespace .
查看pod运行状态
如果设置了 defaultBackend
,则会运行一个名为 ingress-nginx-defaultbackend
的deployment
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-5c7ff55b75-s4p9p 1/1 Running 0 3m22s
ingress-nginx-defaultbackend-64f4cbc798-h2kfk 1/1 Running 0 3m22s
$ kubectl -n ingress-nginx get pod
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-5865555b87-r6465 1/1 Running 0 8m58s
在安装的时候可以指定 ingressclass
名称,集群中可以有多个 ingress-nginx-controller
$ kubectl get ingressclass
NAME CONTROLLER PARAMETERS AGE
nginx k8s.io/ingress-nginx <none> 2d19h
安装MetalLB
添加helm仓库
helm repo add metallb https://metallb.github.io/metallb
helm repo update
下载安装包
helm pull metallb/metallb
解压缩
tar xf metallb-0.13.12.tgz && cd metallb
修改 values.yaml
由于某些特殊原因,无法访问 gcr.io
,我们可以使用 ucloud 提供的镜像加速解决
修改 values.yaml
中所有 gcr.io
安装
helm upgrade --install metallb -n metallb-system --create-namespace .
查看pod运行状态
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
metallb-controller-5f9bb77dcd-mdr7l 1/1 Running 0 6m14s
metallb-speaker-7nw84 4/4 Running 0 20m
metallb-speaker-9bfxd 4/4 Running 0 6m3s