按文檔操做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/
網頁了。