ingress controller學習記錄

建立ingress-nginx

文檔操做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已經能夠看到輸出,如圖瀏覽器

clipboard.png

clipboard.png

建立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/ 網頁了。

相關文章
相關標籤/搜索