Nginx Ingress Controller

15182 단어 Kubernetes
Nginx Ingress Controller
개술
이번 실천 의 주요 목적 은 입 구 를 통일 시 키 는 것 이다. LoadBalancer 등 방식 으로 포트 를 노출 시 키 지 않 고 Ingress 가 제공 하 는 역방향 대리 부하 균형 기능 을 우리 의 유일한 입구 로 사용 하 는 것 이다.다음 절 차 를 통 해 자세히 체득 하 다.
메모: 아래 자원 설정 을 포함 하 는 절 차 는 YAML 프로필 을 자체 적 으로 만 드 는 것 입 니 다 kubectl create -f 또는 kubectl apply -f 배 치 를 통 해 삭제 합 니 다.
설치 진행
Ingress Controller 는 여러 가지 가 있 습 니 다. 저 희 는 가장 익숙 한 Nginx 를 선택 하여 요청 을 처리 합 니 다. 다른 것 은 공식 문 서 를 참고 할 수 있 습 니 다.
  • Nginx Ingress Controller 프로필 다운로드
  • wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
    
  • 설정 파일 을 수정 하고 다음 과 같은 위 치 를 찾 습 니 다 (검색 kubectl delete -f . 아래 에 한 문장 추가 serviceAccountName
  • apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-ingress-controller
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      #         
      replicas: 1
      selector:
        matchLabels:
          app.kubernetes.io/name: ingress-nginx
          app.kubernetes.io/part-of: ingress-nginx
      template:
        metadata:
          labels:
            app.kubernetes.io/name: ingress-nginx
            app.kubernetes.io/part-of: ingress-nginx
          annotations:
            prometheus.io/port: "10254"
            prometheus.io/scrape: "true"
        spec:
          serviceAccountName: nginx-ingress-serviceaccount
          #    hostNetwork: true,           ,   Nginx      80
          hostNetwork: true
          containers:
            - name: nginx-ingress-controller
              image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1
              args:
                - /nginx-ingress-controller
                - --configmap=$(POD_NAMESPACE)/nginx-configuration
                - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
                - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
                - --publish-service=$(POD_NAMESPACE)/ingress-nginx
    //       ...
    
  • 명령 hostNetwork: true 을 통 해 배치
  • 명령 kubectl apply -f mandatory.yaml 을 통 해 보기
  • 배치 Ingress
  • 자원 프로필 kubectl get pods -n ingress-nginx -o wide 을 만 듭 니 다.
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: nginx-web
      annotations:
        #    Ingress Controller    
        kubernetes.io/ingress.class: "nginx"
        #       rules   path          
        nginx.ingress.kubernetes.io/use-regex: "true"
        #       ,    5s
        nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
        #              ,    60s
        nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
        #            ,    60s
        nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
        #        ,    ,    20m
        nginx.ingress.kubernetes.io/proxy-body-size: "10m"
        # URL   
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      #     
      rules:
      #    ,     ,       
      - host: k8s.funtl.com
        http:
          paths:
          - path:
            backend:
              #       Service Name
              serviceName: tomcat-http
              #       Service Port
              servicePort: 8080
    
  • 명령 ingress.yml 을 통 해 배치
  • 명령 kubectl apply -f ingress.yml 을 통 해 보기
  • Tomcat 배치
    Tomcat 를 배치 하지만 내부 네트워크 에서 만 접근 할 수 있 습 니 다. 저 희 는 Ingress 가 제공 하 는 역방향 프 록 시 기능 을 통 해 Tomcat 위 에 kubectl get ingress 자원 프로필 을 만 들 려 고 합 니 다.
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: tomcat-app
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            name: tomcat
        spec:
          containers:
          - name: tomcat
            image: tomcat:8.5.43
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tomcat-http
    spec:
      ports:
        - port: 8080
          targetPort: 8080
      # ClusterIP, NodePort, LoadBalancer
      type: ClusterIP
      selector:
        name: tomcat
    
  • 명령 tomcat.yml 을 통 해 배치
  • 성공 여부 검증
    Tomcat 보기
    kubectl get deployment
    
    #     
    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    tomcat-app   2/2     2            2           88m
    
    kubectl get service
    
    #     
    NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP    2d5h
    tomcat-http   ClusterIP   10.97.222.179   <none>        8080/TCP   89m
    

    Ingress 보기
    kubectl get pods -n ingress-nginx -o wide
    
    #     ,      IP   ,          
    NAME                                        READY   STATUS    RESTARTS   AGE   IP                NODE                 NOMINATED NODE   READINESS GATES
    nginx-ingress-controller-76f9fddcf8-vzkm5   1/1     Running   0          61m   192.168.141.121   kubernetes-node-02   <none>           <none>
    
    kubectl get ingress
    
    #     
    NAME        HOSTS          ADDRESS   PORTS   AGE
    nginx-web   k8s.funtl.com             80      61m
    

    테스트 액세스
    성공 적 으로 Tomcat 에 대리 하면 성공 을 표시 합 니 다.
    #     Hosts        ,    IP   HOST        
    curl -v http://192.168.141.121 -H 'host: k8s.funtl.com'
    

    좋은 웹페이지 즐겨찾기