728x90
반응형

Secrets

  • 민감 정보 저장에 사용
  • 기본 base64 인코딩이 default
  • 파드에서 파일로 마운팅되거나 환경 변수로 사용할 수 있음
apiVersion: v1  
kind: Pod  
metadata:  
    name: webapp-with-db  
    labels:  
    app: my-webapp  
spec:  
    containers:  
    - name: webapp  
      image: nginx:latest 
      ports:  
        - containerPort: 80  
      envFrom:  
        - configMapRef:  
            name: webapp-config  
    - name: database  
      image: mongo:latest  
      env:  
        - name: MONGO_INITDB_ROOT_USERNAME  
          valueFrom:  
            secretKeyRef:  
                name: db-credentials  
                key: username  
        - name: MONGO_INITDB_ROOT_PASSWORD  
          valueFrom:  
            secretKeyRef:  
                name: db-credentials  
                key: password  

---  

apiVersion: v1  
kind: Service  
metadata:  
    name: webapp-service  
spec:  
    selector:  
        app: my-webapp  
    ports:  
      - protocol: TCP  
        port: 80  
        targetPort: 80  

---  

apiVersion: v1  
kind: ConfigMap  
metadata:  
    name: webapp-config  
data:  
    WEBAPP_ENV: "production"  
    DATABASE_URL: "mongodb://database-service:27017/mydb"  

---  

apiVersion: v1  
kind: Secret  
metadata:  
    name: db-credentials                   // Secret 명칭
type: Opaque  
data:  
    username: <base64-encoded-username>    // 실제 base64 로 인코딩 된 값
    password: <base64-encoded-password>
728x90
반응형
728x90
반응형

Config Map

  • 파드에 환경변수 / 설정 파일로 마운트 된 내용들을 저장하는 용도
  • 컨테이너 이미지로부터 설정을 분리할 수 있으며, 컨테이너를 재빌드 할 필요 없이 설정을 업데이트 하기 용이하다
apiVersion: v1  
kind: Pod  
metadata:  
    name: webapp-with-db  
    labels:  
        app: my-webapp  
spec:  
    containers:  
    - name: webapp  
      image: nginx:latest  
      ports:  
        - containerPort: 80  
      envFrom:    
        - configMapRef:            // ConfigMap 참조
              name: webapp-config  
    - name: database  
      image: mongo:latest  

---  

apiVersion: v1  
kind: Service  
metadata:  
    name: webapp-service  
spec:  
    selector:  
        app: my-webapp  
    ports:  
    - protocol: TCP  
      port: 80  
      targetPort: 80  

---  

apiVersion: v1  
kind: ConfigMap                  // ConfigMap 설정
metadata:  
    name: webapp-config  
data:  
    WEBAPP_ENV: "production"  
    DATABASE_URL: "mongodb://database-service:27017/mydb"
728x90
반응형
728x90
반응형

Service

  • Service는 파드들의 그룹에 접근하기 위한 안정적인 엔드포인트를 정의한 것
  • 어플리케이션을 클러스터 내의 다른 파드들에 노출시거나 외부 클라이언트에 노출시킬 수 있다.
  • Load Balancing과 자동 스케일링 기능을 제공하여, 어플리케이션이 매우 사용 가능한 상태로 남게 해 준다
apiVersion: v1  
kind: Pod  
metadata:  
    name: webapp-with-db  
    labels:  
        app: my-webapp  
spec:  
    containers:  
    - name: webapp  
      image: nginx:latest  
      ports:  
        - containerPort: 80  
    - name: database  
      image: mongo:latest  

---  

apiVersion: v1  
kind: Service  
metadata:  
    name: webapp-service  
spec:  
    selector:            // 서비스 내의 파드를 선택한다
        app: my-webapp  // 파드가 해당 label을 metadata로 가진 이상, service는 이 파드를 타겟한다.
    ports:  
    - protocol: TCP   
      port: 80  
      targetPort: 80.   // 파드의 포트. 

Ingress

  • 클러스터 내에서 파드끼리 내부 통신을 가능하게 함
  • 즉, 서비스를 클러스터 외부 클라이언트에 노출시킴
  • 어플리케이션의 외부 엔트리 포인로서 동작
  • 들어오는 트래픽에 대해 라우팅 규칙과 로드 밸런싱을 설정할 수 있게 함
  • Ingress 사용을 위해서는 클러스터 내에 Ingress Controller가 배포되어야 함
apiVersion: networking.k8s.io/v1  
kind: Ingress  
metadata:  
    name: webapp-ingress  
spec:  
    rules:  
    - host: mywebapp.example.com       // 클러스터 외부에서 접근할 수 있는 도메인
      http:                            
        paths:                         // 라우팅 규칙을 정의하는 부분
        - path: /  
          pathType: Prefix  
          backend:                     // 트래픽이 포워딩 되어야 하는 타겟 서비스 정의
            service:  
                name: webapp-service  
                port:  
                    number: 80
728x90
반응형

+ Recent posts