k8s에서 nginx를 시작하고 Welcome to nginx

8633 단어 nginxkubernetesAWS

목표



공식 문서에 나열된 Nginx 매니페스트를 배포하여 외부에서 액세스 할 수있게합니다.


권장 환경


  • EC2
  • Kubeadm

  • 만들 파일 목록


    work
    ├─ debug.yaml
    ├─ Dockerfile
    ├─ nginx-deployment.yaml
    └─ nginx-service.yaml
    

    debug용 포드 생성



    Dockerfile 만들기(Cent OS)



    Dockerfile
    FROM centos:7
    
    # コンテナイメージ作成
    docker build -t debug .
    
    # イメージが作成されたか確認
    docker images | grep debug
    
    # コンテナ動作確認
    docker run -it debug bash
    

    포드 만들기



    매니페스트 만들기

    debug.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: debug
      namespace: default
    spec:
      containers:
        - name: debug
          image: debug
          imagePullPolicy: Never # ローカルに存在するコンテナイメージを取得する
          command:
            - "sh"
            - "-c"
          args:
            - |
              while true
              do
                sleep 5
              done
    

    매니페스트를 k8s에 배포
    kubectl apply -f debug.yaml
    

    포드 시작 확인
    kubectl get pod
    

    Nginx의 Deployment 작성(공식 문서의 것)



    nginx-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    

    매니페스트를 k8s에 배포
    kubectl apply -f nginx-deployment.yaml
    

    Depoyments 확인
    kubectl get deployments
    

    포드 시작 및 IP 주소 확인
    kubectl get pod -o wide
    
    NAME                                READY   STATUS    RESTARTS   AGE     IP               NODE         NOMINATED NODE   READINESS GATES
    debug                               1/1     Running   0          16m     192.168.29.97    k8s.master   <none>           <none>
    nginx-deployment-6b474476c4-djqqv   1/1     Running   0          3m48s   192.168.29.98    k8s.master   <none>           <none>
    nginx-deployment-6b474476c4-dww8l   1/1     Running   0          3m48s   192.168.29.99    k8s.master   <none>           <none>
    nginx-deployment-6b474476c4-gjm29   1/1     Running   0          3m48s   192.168.29.100   k8s.master   <none>           <none>
    

    debug용 Pod를 사용하여 소통 확인
    # Podの中に入る
    kubectl exec -it debug bash
    
    # curlコマンド実行
    curl 192.168.29.98
    curl 192.168.29.99
    curl 192.168.29.100
    

    Nginx 서비스 생성(k8s 클러스터 외부에서 액세스할 수 있도록 하기 위한 것)



    공식 문서 참고

    nginx-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
        nodePort: 30000
      type: NodePort
    

    매니페스트를 k8s에 배포
    kubectl apply -f nginx-service.yaml
    

    서비스 확인
    kubectl get svc
    

    서비스 세부정보
    kubectl describe service nginx-svc
    
    Name:                     nginx-svc
    Namespace:                default
    Labels:                   <none>
    Annotations:              Selector:  app=nginx
    Type:                     NodePort
    IP:                       10.96.67.76
    Port:                     <unset>  80/TCP
    TargetPort:               80/TCP
    NodePort:                 <unset>  30000/TCP
    Endpoints:                192.168.29.100:80,192.168.29.98:80,192.168.29.99:80
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>
    

    디버그용 포드를 사용하여 세 개의 움직이는 포드를 자동으로 할당하는지 확인
    # Podの中に入る
    kubectl exec -it debug bash
    
    # curlコマンド実行
    # curl <サービス名>
    curl nginx-svc
    

    클러스터 외부에서 소통 확인 (DebugPod에 들어 있지 않은 상태)
    # kubectl describe service nginx-svcで表示される「IP」の値
    curl 10.96.67.76
    

    브라우저에서도 볼 수 있도록



    가상 머신의 포트 번호 30000 열기
    AWS의 경우 보안 그룹 인바운드 규칙을 편집하여 포트 열기

    브라우저에 액세스


    http://<仮想マシンのIPアドレス>:30000
    

    좋은 웹페이지 즐겨찾기