728x90 Kubernetes42 [데브옵스를 위한 쿠버네티스 마스터] 프라이빗 클라우드를 위한 인그레스 Ingress-Nginx 구현하기 로컬 쿠버네티스에 ingress-nginx 사용방법 1. ingress-nginx 개요 인그레스를 사용하면 L7의 웹 요청을 해석해서 단일 IP, 단일 포트로 다수의 도메인과 서비스로 연결할 수 있음 이 방법을 사용하면 웹페이지의 도메인은 같지만 다른 앱을 사용하는 것도 가능하게 한다 하지만 쿠버네티스에서 기본적으로 지원하는 인그레스 오브젝트는 클라우드 환경이 아니면 사용할 수 없다 클라우드에서 인그레스를 생성하면 외부에 게이트웨이를 생성하고 각 기능에 맞게 서비스에 연결한다 GCP의 경우에는 외부 게이트웨이에 L7 규칙이 적용돼 있다 이 포스트에 있는 nginx-ingress를 사용해보기 전에 GCP에서 제공하는 ingress를 한번 써보시길 권장한다 HTTP(S) 부하 분산용 GKE 인그레스 http.. 개발강의정리/DevOps 2021. 1. 22. [데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 환경에서 예제를 활용한 애플리케이션 개발 쿠버네티스 환경에서 WordPress + Mysql 프로젝트 개발 Kubernetes Examples Git https://github.com/kubernetes/examples https://github.com/kubernetes/examples/tree/master/mysql-wordpress-pd 시스템 구축 방법을 YAML로 정리하고 배포하시오 Wordpress MySql 쿠버네티스 배포 실습 GCP 에서 실습 kustomization.yaml 생성하기 https://kubernetes.io/ko/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/#kustomization-yaml-%EC%83%9D%EC%84%B1%ED%9.. 개발강의정리/DevOps 2021. 1. 22. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 클러스터, 애플리케이션 트러블 슈팅 가이드 클러스터, 애플리케이션 트러블 슈팅 가이드 트러블은 언제나 발생 트러블은 매번 이슈가 됨 쿠버네티스도 예외는 아니며 시스템이 단순하지 않기 때문에 더 철저한 점검 방법이 필요 트러블 슈팅의 기본은 최소단위로 테스트하기! 크게 두 가지로 클러스터, 애플리케이션 트러블이 발생 가능 애플리케이션 트러블 슈팅 애플리케이션에서 트러블이 발생하는 경우에는 해결 방법이 비교적 단순 각각의 포드, 컨피그맵 등의 로직에서 무엇이 잘못됐는지 확인 일반적으로 이름이나 레이블링이 다른 데서 발생 클러스터 트러블 슈팅 클러스터에서 발생하는 트러블 슈팅의 경우는 쿠버네티스 시스템에 대한 깊은 이해를 요구 일반적으로 다수에서 발생하기 보다는 한 두 군데의 장애가 존재 Kubectl이 접속되지 않을 때는 serverapi 자체의 문.. 개발강의정리/DevOps 2021. 1. 22. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 네트워크 정책 적용 네트워크 정책 적용 네트워크 정책(Network Policy) CNI 플러그인 Clico, Weavenet 을 설치해야지 사용가능 포드 그룹이 서로 및 다른 네트워크 끝점과 통신하는 방법을 지정 NetworkPolicy 리소스는 레이블을 사용하여 포드를 선택 선택한 포드에 허용되는 트래픽을 지정하는 규칙을 정의 특정 포드를 선택하는 네임 스페이스에 NetworkPolicy가 있으면 해당 포드는 NetworkPolicy에서 허용하지 않는 연결을 거부 이그레스 https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource 선택된 포드에서 나가는 트래픽에 대한 정책 설정 ipBlock을 통해 Bloc.. 개발강의정리/DevOps 2021. 1. 22. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 시큐리티 콘텍스트 시큐리티 콘텍스트 보안 컨텍스트 서버 침해사고 발생 시 침해사고를 당한 권한을 최대한 축소하여 그 사고에 대한 확대를 방지 침해사고를 당한 서비스가 모든 권한(root나 노드 커널 기능)으로 동작하는 경우 서비스를 탈취한 공격자는 그대로 컨테이너의 권한을 사용할 수 있음 최소 권한 정책에 따른 취약점 감소 보안 컨텍스트 설정에는 다음 사항을 포함 권한 상승 가능 여부 프로세스 기본 UID/GID를 활용한 파일 등의 오브젝트의 액세스 제어 Linux Capabilities를 활용한 커널 기능 추가 오브젝트에 보안 레이블을 지정하는 SELinux (Security Enhanced Linux) 기능 AppArmor : 프로그램 프로필을 사용하여 개별 프로그램의 기능 제한 Seccomp : 프로세스의 시스템 호.. 개발강의정리/DevOps 2021. 1. 22. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - RBAC를 활용한 롤 기반 엑세스 컨트롤 RBAC를 활용한 롤 기반 엑세스 컨트롤 역할 기반 액세스 제어 (RBAC) 기업 내에서 개별 사용자의 역할을 기반으로 컴퓨터, 네트워크 리소스에 대한 액세스를 제어 rbac.authorization.k8s.ioAPI를 사용하여 정의 권한 결정을 내리고 관리자가 Kubernetes API를 통해 정책을 동적으로 구성 RBAC를 사용하여 룰을 정의하려면 apiserver에 --authorization-mode=RBAC 옵션이 필요 rbac.authorization.k8s.ioAPI RBAC를 다루는 이 API는 총 4가지의 리소스를 컨트롤 Role 네임스페이스에 종속되는 제한된 특정 사용자 권한 RoleBinding ClusterRole 네임스페이스에 제약이 없는 관리자 권한 ClusterRoleBindi.. 개발강의정리/DevOps 2021. 1. 22. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - kube config 파일을 사용한 인증 kube config 파일을 사용한 인증 직접 curl을 사용하여 요청 key와 cert, cacert 키를 가지고 직접 요청 가능 그러나 매번 이 요청을 사용하기에는 무리가 있음 $ curl https://kube-api-server:6443/api/v1/pods\ --key user.key \ --cert user.crt \ --cacert ca.crt \ kubectl config 명령 확인 set-credentials: 로그인 관련 정보 등록 set-cluster: 클러스트를 추가로 등록 set-context: 만든 credentials 와 cluster 를 조합해서 어떤 서버에 어떤 아이디를 가지고 조회를 할 건지 정함 $ kubectl config Modify kubeconfig files u.. 개발강의정리/DevOps 2021. 1. 20. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - TLS 인증서를 활용한 유저 생성하기 TLS 인증서를 활용한 유저 생성하기 1. ca를 사용하여 직접 csr 승인하기 개인 키 생성하기 길이 2048 만큼의 개인 키 생성 $ openssl genrsa -out gasbugs.key 2048 private 키를 기반으로 인증서 서명 요청하기 CN: 사용자 이름 O: 그룹 이름 CA에게 csr 파일로 인증을 요청할 수 있음! $ openssl req -new -key gasbugs.key -out gasbugs.csr -subj "/CN=gasbugs/O=boanproject" Kubernetes 클러스터 인증 기관(CA) 사용이 요청을 승인해야 함 내부에서 직접 승인하는 경우 pki 디렉토리에 있는 ca.key와 ca.crt를 사용하여 승인 가능 gasbugs.csr을 승인하여 최종 인증서인.. 개발강의정리/DevOps 2021. 1. 20. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - TLS 인증서를 활용한 통신 이해 TLS 인증서를 활용한 통신 이해 SSL 통신 과정 이해 응용계층인 HTTP와 TCP계층사이에서 작동, 어플리케이션에 독립적 -> HTTP제어를 통한 유연성 데이터의 암호화 (기밀성), 데이터 무결성, 서버인증기능, 클라이언트 인증기능 Certificate를 보장하는 방법! 인증기관(CA) 그림 출처: https://docs.pexip.com/admin/certificate_management.htm#infinity_usage kubernetes의 인증서 위치 $ sudo ls /etc/kubernetes/pki apiserver-etcd-client.crt apiserver-kubelet-client.crt apiserver.crt ca.crt etcd front-proxy-ca.key front-pr.. 개발강의정리/DevOps 2021. 1. 20. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - Accounts Accounts 어카운츠에는 두 가지의 타입이 존재 사용자를 위한 user 애플리케이션(포드 외)를 위한 service account Static Token File Apiserver 서비스를 실행할 때 --token-auth-file=SOMEFILE.csv 전달 (kube-apiserver 수정 필요) API 서버를 다시 시작해야 적용됨 토큰, 사용자 이름, 사용자 uid, 선택적으로 그룹 이름 다음에 최소 3 열의 csv 파일 password1,user1,uid001,"group1" password2,user2,uid002 password3,user3,uid003 password3,user4,uid004 Static Token File 을 적용했을 때 사용 방법 HTTP 요청을 진행할 때 다음과 같은.. 개발강의정리/DevOps 2021. 1. 20. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 보안을 위한 다양한 리소스 보안을 위한 다양한 리소스 모든 통신은 TLS로 대부분의 엑세스는 Kube-apiserver를 통하지 않고서는 불가능 엑세스 가능한 유저 파일 – 유저 이름과 토큰 Service Accounts 인증서(Certificates) External Authentication Providers – LDAP 무엇을 할 수 있는가? RBAC Authorization ABAC Authorization Node Authorization WebHook Mode 개발강의정리/DevOps 2021. 1. 20. [데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 백업과 복원 방법 백업과 복원 방법 백업 리소스의 종류 포드의 정보 파일 YAML $ kubectl get all --all-namspaces –o yaml > all-deploy-services.yaml $ kubectl create -f all-deploy-services.yaml YAML 에 저장된 데이터는 위의 명령어로 확인 후 백업 Etcd 데이터베이스 https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster configMap, secret, pvc 와 같은 데이터들은 etcd 에 저장된 데이터를 확인 후 백업 데이터 양이 그렇게 많지 않음 ETCDCTL_API=3 etcdctl --en.. 개발강의정리/DevOps 2021. 1. 20. 이전 1 2 3 4 다음 💲 추천 글 728x90