ingress-nginx部署
1、部署nginx-ingress-controller
当前最新版本:NGINX: 0.25.0
镜像地址:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.0
特点之一:Migration from NGINX to OpenResty 1.15.8
本处选择前一版本:NGINX: 0.24.1
镜像地址:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1
安装:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/mandatory.yaml
kubectl apply -f mandatory.yaml
验证:
kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx --watch
验证当前安装的版本
POD_NAMESPACE=ingress-nginx
POD_NAME=$(kubectl get pods -n $POD_NAMESPACE -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}')
kubectl exec -it $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --version
2、部署ingress-nginx service
通过ingress-controller对外提供服务,现在还需要手动给ingress-controller建立一个service,接收集群外部流量。方法如下:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/provider/baremetal/service-nodeport.yaml
vim service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
nodePort: 30080
- name: https
port: 443
targetPort: 443
protocol: TCP
nodePort: 30443
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
---
kubectl apply -f service-nodeport.yaml
3、部署后端服务
4、部署ingress
vim ingress-myapp.yaml
apiVersion: extensions/v1beta1 #api版本
kind: Ingress #清单类型
metadata: #元数据
name: ingress-eureka #ingress的名称
namespace: default #所属名称空间
annotations: #注解信息
kubernetes.io/ingress.class: "nginx"
spec: #规格
rules: #定义后端转发的规则
- host: eureka.jinyue.centos7 #通过域名进行转发
http:
paths:
- path: #配置访问路径,如果通过url进行转发,需要修改;空默认为访问的路径为"/"
backend: #配置后端服务
serviceName: eureka-service-internal
servicePort: 8761
kubectl apply -f ingress-eureka.yaml
验证:
kubectl get ingress
kubectl describe ingress ingress-eureka
kubectl get pods -n ingress-nginx
进入nginx-ingress-controller进行查看是否注入了nginx的配置
kubectl exec -n ingress-nginx -it nginx-ingress-controller-6bd7c597cb-6pchv -- /bin/bash
修改hosts
vim /etc/hosts
192.168.50.200 eureka.jinyue.centos7 #增加
192.168.50.201 eureka.jinyue.centos7 #增加
192.168.50.202 eureka.jinyue.centos7 #增加
在本机浏览器打开地址:http://eureka.jinyue.centos7:30080/
总结
从前面的部署过程中,可以再次进行总结部署的流程如下:
①下载Ingress-controller相关的YAML文件,并给Ingress-controller创建独立的名称空间;
②部署后端的服务,如eureka,并通过service进行暴露;
③部署Ingress-controller的service,以实现接入集群外部流量;
④部署Ingress,进行定义规则,使Ingress-controller和后端服务的Pod组进行关联。
构建TLS站点(eureka没开启https访问,本处无效,其他开启https访问的服务没问题)
openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=eureka.jinyue.centos7
kubectl create secret tls eureka-ingress-secret --cert=tls.crt --key=tls.key
kubectl describe secret eureka-ingress-secret
cp ingress-eureka.yaml ingress-eureka-tls.yaml
vim ingress-eureka-tls.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-eureka-tls
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: eureka.jinyue.centos7
http:
paths:
- path:
backend:
serviceName: eureka-service-internal
servicePort: 8761
kubectl apply -f ingress-eureka-tls.yaml
kubectl get ingress
kubectl describe ingress ingress-eureka-tls