在k8s上部署服务的时候,我们经常通过svc暴露的端口提供对外访问,如果在k8s上部署的服务比较多的话,这样不仅不安全还会使用过多的端口资源,通过部署Ingress可以作为集群内部服务唯一的入口。
原理部分就不多说了,其原理和nginx差不多,接下来进行部署,ingress部署分为nginx官方的版本和kubernetes官方的版本,我这边是以部署k8s官方版本的ingress为主,部署ingress的yaml地址如下:
https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.64.0/deploy/static/provider/baremetal/deploy.yaml
其中改动部分如下:
1、 yaml中定义controller的deployment部分添加如下:
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
2、 yaml中定义controller的svc部分改动如下:
type: NodePort 改为 type: ClusterIP
3、创建的时候可能出现pod无法正常启动,报错无法获取ingressClass,在yaml中添加如下部分
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
labels:
helm.sh/chart: ingress-nginx-3.30.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.46.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: nginx
namespace: ingress-nginx
spec:
controller: k8s.io/ingress-nginx
部署完查看下pod的状态,并curl对应的地址看看是否正常
到此ingress部署完毕。
k8s官方介绍ingress参考地址如下:
https://kubernetes.io/zh/docs/concepts/services-networking/ingress/#ingress- %E6%98%AF%E4%BB%80%E4%B9%88
k8s官方部署的ingress地址如下:
https://kubernetes.github.io/ingress-nginx/