注意:node
本文只用的ingress-nginx版本为0.24.1,可在官方网站自行下载nginx
https://github.com/kubernetes/ingress-nginxgit
1、Ingress-Nginx工做原理github
1.ingress controller经过和kubernetes api交互,动态的去感知集群中ingress规则变化, 2.而后读取它,按照自定义的规则,规则就是写明了哪一个域名对应哪一个service,生成一段nginx配置, 3.再写到nginx-ingress-control的pod里,这个Ingress controller的pod里运行着一个Nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中, 4.而后reload一下使配置生效。以此达到域名分配置和动态更新的问题。
2、搭建vim
kubnet ~]$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/mandatory.yaml后端
kubnet ~]$ kubectl get pods -n ingress-nginxapi
kubnet ~]$ mkdir ingress浏览器
kubnet ingress]$ vim deploy-demo.yml 服务器
apiVersion: v1 kind: Service metadata: name: myapp namespace: default spec: selector: app: myapp release: stable ports: - name: myapp port: 80 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: myapp namespace: default spec: selector: matchLabels: app: myapp release: stable replicas: 3 template: metadata: labels: app: myapp release: stable spec: containers: - name: myapp image: fangwenkai/kubernetes:v1.15 imagePullPolicy: IfNotPresent ports: - name: myapp containerPort: 80
kubnet ingress]$ kubectl apply -f deploy-demo.ymlapp
kubnet ingress]$ kubectl get svc
kubnet ingress]$ kubectl get deploy
kubnet ingress]$ kubectl get pods
kubnet ingress]$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/provider/baremetal/service-nodeport.yaml
kubnet ingress]$ 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 nodePort: 30001 // 手动指定服务器端口,不指定就是默认 protocol: TCP - name: https port: 443 targetPort: 443 nodePort: 30443 // 手动指定服务器端口,不指定就是默认 protocol: TCP selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx ---
kubnet ingress]$ kubectl get svc -n ingress-nginx
kubnet ingress]$ curl 192.168.23.101:30001 // 访问本机地址,此时结果应该是404
kubnet ingress]$ vim ingress-myapp.yml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-myapp namespace: default annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: myapp.kaikai.com http: paths: - path: backend: serviceName: myapp servicePort: 80
kubnet ingress]$ kubectl get ingress
kubnet ingress]$ curl myapp.kaikai.com:30001 // 能看到后端Pod结果
或者浏览器直接访问地址