Ingress 是从Kubernetes集群外部访问集群内部服务的入口,概念示意可参考下方说明。你可以在Ingress配置中提供外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机等。用户通过POST Ingress资源到API server的方式来请求ingress。
internet | [ Ingress ] --|-----|-- [ Services ]
本文将以Nginx官方开源的Nginx-ingress controller为例,说明Controller部署和Ingress定义。更多外部类型的Ingresss Controller参考Kubernetes官方文档。
一、环境准备
wget https://github.com/nginxinc/kubernetes-ingress/archive/v1.4.5.tar.gz tar -zxvf v1.4.5.tar.gz
**说明**:本文说明在1.12.3版本的集群上如何部署nginx-ingress controller,如集群版本不同,选择其他适合的ginx-ingress controller安装部署文件。
进入解压缩后的nginx-ingress controller安装目录;
cd kubernetes-ingress-1.4.5/deployments
二、安装nginx-ingress controller
为nginx-ingress controller创建一个namespace和service account:
kubectl apply -f common/ns-and-sa.yaml
为NGINX默认Server配置TLS证书和key,并将TLS证书和key保存到secret中:
kubectl apply -f common/default-server-secret.yaml
说明:建议使用合适的TLS证书和key替换default-server-secret.yaml文件中自签发的证书和key。
创建config map保存NGINX的自定义配置:
kubectl apply -f common/nginx-config.yaml
说明:目前提供的config map中的data为空,您可以按需添加自定义配置。
为第1步中创建的service account配置RBAC:
kubectl apply -f rbac/rbac.yaml
以Deployment的方式部署nginx-ingress controller:
kubectl apply -f deployment/nginx-ingress.yaml
执行如下命令,确定部署nginx-ingress controller的Deployment运行正常:
kubectl get deployment -n nginx-ingress NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-ingress 1 1 1 1 24d
apiVersion: v1 kind: Service metadata: name: nginx-ingress #建议Service使用与nginx-ingress controller对应的Deployment名称相同的名称 namespace: nginx-ingress spec: type: LoadBalancer ports: - port: 80 targetPort: 80 protocol: TCP name: http - port: 443 targetPort: 443 protocol: TCP name: https selector: app: nginx-ingress
将上述Service定义到Yaml文件,执行如下命令创建对应的Service:
kubectl create -f X.yaml # 请使用对应的Yaml文件名称替换X.yaml
kubectl get svc -n nginx-ingress NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ingress LoadBalancer 10.X.XX.231 114.XX.XX.XX 80:30494/TCP,443:30467/TCP 24d 说明:Service的External IP将作为nginx-ingress controller的VIP,为集群中使用nginx-ingress controller的Ingress提供公网访问入口
args: - -nginx-configmaps=$(POD_NAMESPACE)/nginx-config - -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret - -external-service=nginx-ingress #新增内容 kubectl apply -f deployment/nginx-ingress.yaml #重新部署nginx-ingress controller
kubectl get pod -n nginx-ingress 输出结果: NAME READY STATUS RESTARTS AGE nginx-ingress-6hz6b 1/1 Running 0 24d nginx-ingress-kbgbk 1/1 Running 0 24d nginx-ingress-nt68q 1/1 Running 0 24d
三、参考链接
完成Nginx-ingress Controller部署后,您可以在Kubernetes集群中部署Ingress Resource,京东云提供了如下基于Nginx-ingress Controller的部署方案,详情参考如下文档。