按文档操做node
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml kubectl apply -f mandatory.yaml
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml ### 在service的spec中将nodePort固定一下。 kubectl apply -f service-nodeport.yaml
deploy-demo.yaml
的内容nginx
apiVersion: v1 kind: Service metadata: name: myapp namespace: default spec: selector: app: myapp release: canary ports: - name: http targetPort: 80 port: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 3 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: ikubernetes/myapp:v2 ports: - name: http containerPort: 80
建立myapp的service和myapp-deploy的Deployment。git
kubectl apply -f deploy-demo.yaml
github
结果api
[root@master ingress-nginx]# kubectl get pods -n ingress-nginx NAME READY STATUS RESTARTS AGE default-http-backend-6586bc58b6-4f6qm 1/1 Running 0 30m nginx-ingress-controller-7675fd6cdb-njvdb 1/1 Running 0 30m [root@master ingress-nginx]# kubectl get pods NAME READY STATUS RESTARTS AGE myapp-deploy-67f6f6b4dc-67f7f 1/1 Running 0 7m myapp-deploy-67f6f6b4dc-hdbht 1/1 Running 0 7m myapp-deploy-67f6f6b4dc-ktfh6 1/1 Running 0 7m [root@master ingress-nginx]# kubectl get svc --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8d default myapp ClusterIP 10.103.69.18 <none> 80/TCP 7m ingress-nginx default-http-backend ClusterIP 10.97.71.74 <none> 80/TCP 33m ingress-nginx ingress-nginx NodePort 10.110.227.164 <none> 80:30080/TCP,443:30443/TCP 31m kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 8d
此时,访问nodeIP:nodePort已经能够看到输出,如图浏览器
建立Ingress对象ingress-myapp.yaml
的内容以下app
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-myapp namespace: default annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: myapp.test.com http: paths: - path: backend: serviceName: myapp servicePort: 80
建立Ingresside
[root@master ingress-nginx]# kubectl apply -f ingress-myapp.yaml ingress.extensions/ingress-myapp created [root@master ingress-nginx]# kubectl get ingress NAME HOSTS ADDRESS PORTS AGE ingress-myapp myapp.test.com 80 4s
建立成功后,Ingress会将信息注入到ingress-controller里面去,即:会自动转换为nginx的配置文件spa
[root@master ingress-nginx]# kubectl get pods -n ingress-nginx NAME READY STATUS RESTARTS AGE default-http-backend-6586bc58b6-4f6qm 1/1 Running 0 1h nginx-ingress-controller-7675fd6cdb-njvdb 1/1 Running 0 1h [root@master ingress-nginx]# kubectl exec -n ingress-nginx -it nginx-ingress-controller-7675fd6cdb-njvdb -- /bin/sh $ cat nginx.conf|grep -C2 myapp ## end server _ ## start server myapp.test.com server { server_name myapp.test.com ; listen 80; -- set $namespace "default"; set $ingress_name "ingress-myapp"; set $service_name "myapp"; set $service_port "80"; set $location_path "/"; -- port_in_redirect off; set $proxy_upstream_name "default-myapp-80"; client_max_body_size "1m"; -- } ## end server myapp.test.com # default server, used for NGINX healthcheck and access to nginx stats $
能够看到pod内的nginx.conf文件确实被注入了myapp相关的信息。code
此时,在本地机器绑定myapp.test.com为两个node的ip,就能够在本地机器的浏览器中访问 http://myapp.test.com:30080/
网页了。