Elasticsearch 가 버전이 높아짐에 따라 인증서에 대한 이해가 필요하게 되었다. 사실 이 인증서가 필요한 이유가 Elastic 에서 배포하는 X-Pack 중에 Security 플러그인 때문인데, 이 Security 를 활성화 하게 되면 TCP, HTTP 통신을 TLS 통신을 하도록 강제하고 있다. 문제는 Elasticsearch 자바 기반이며, 따라서 생성하는 파일이 여느 다른 인증서와는 다른 면도 있다. ‘다른 면도 있다’ 라고 표현한 이유는 일반적인 PEM 형식의 보안키와 인증서를 모두 지원하지만 여전히 자바 세계에서만 통용되는 방법을 여전히 고수하고 있기 때문이다. keystore 파일 최신 버전의 Elasticsearch 7 을 설치하게 […]
Nginx 로그를 위한 Logstash Pipeline 설정하기
Logstash 를 이용해 로그를 프로세싱 해보자. Logstash 에 대한 기초적인 설정은 다음글에서 확인 가능하다. Logstash 살펴보기 또, 이 글은 Elastic 홈페이지에 내용을 기반으로 한다. Parsing Logs with Logstash filebeat 설정 및 기동 먼저 파일 filebeat 설정을 다음과 한다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/linux.systemv.pe.kr.access.log tags: ["nginx_access_log"] fields: server_name: linux.systemv.pe.kr log_type: nginx-log nginx: true filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false output.logstash: hosts: ["192.168.97.32:5044"] |
Elastic 홈페이지에는 간단하게 설정하도록 나오지만 여기서는 몇가지 설정을 추가 하였다. tags 를 설정하였고 fields 도 추가 하였다. 다음과 같이 시작 한다.
|
1 |
]$ ./filebeat -e -c filebeat.yml -d "publish" |
logstash Nginx pipeline 설정 먼저 filebeat 으로부터 메시지가 잘 들어오는지 디버깅을 먼저 해보자. 다음과 같이 간단하게 설정을 해본다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
input { beats { port => "5044" } } #filter { # #} output { stdout { codec => rubydebug } } |
[…]
Logstash 살펴보기
ELK 스택에서 로그를 프로세싱하고 저장소에 실시간으로 적재해주는 프로그램인 Logstash 에 대해서 살펴본다. 자바 프로그램 Logstash 는 자바 프로그램이다. 그래서 Java Runtime 이 필요하다. 그런데, Logstash 에는 Java Runtime 이 내장되어 있어서 별도로 설치하지 않아도 된다. 하지만 이 자바 때문에 프로그램이 무겁다. Logstash 정의 다음과 같이 정의가 머리속에 담아 두기 좋다. 실시간 파이프라인(Pipeline) 기능을 가진 데이터 수집 엔진을 가진 오픈 소스 소프트웨어다. 파이프라인(Pipeline) Logstash 는 파이프라인(Pipeline) 형식으로 데이터를 처리 한다. INPUTS 은 데이터를 입력받는 부분에 대한 설정이다. OUTPUTS 은 어디로 데이터를 […]
로그 저장과 트래킹
로그(log) 는 각종 시스템과 소프트웨어 프로그램의 정보를 담고 있다. 한 사람이 하나의 시스템, 하나의 소프트웨어 프로그램을 다루거나 관리를 한다면 별 문제가 없겠지만 요즘 처럼 분산형 시스템과 소프트웨어를 사용하는 시대에 로그를 하나씩 다 들여다 본다는 건 불가능이다. 거기다 로그를 본다는 것도 여간 쉬운일이 아니다. 매우 지루하고 많은 시간을 허비해야 하는데, 수 많은 로그속에서 내가 필요로하는 정보를 찾기란 매우 어렵다. 그래서 이것을 손쉽게 처리할 수 있도록 도와주는 프로그램 그룹이 만들어졌는데, 다음과 같은 것이다. Splunk 스플렁크(Splunk) 는 사용 소프트웨어다. 대량으로 로그를 저장하고 분석하도록 […]
ElasticSearch RPM 패키지 설치 Security
ElasticSearch 를 RPM 패키지로 설치할 경우에 Security 설정을 어떻게 해야하는지에 대해서 다룬다. Security 설정은 X-Pack 을 활성화 하기 위함이며 이를 위해서는 인증서 관련 문제를 해결해야 한다. 사례 일단, 엘라스틱 서치는 대부분 3대로 구성한다. 대부분 호스트를 다음과 같이 정할 것이다. es-01 es-02 es-03 이때, es-01 서버에서 다음과 같은 작업을 해야 한다. es-01 서버에서 인증서 작업 X-Pack 을 활성화하기 위해서는 보안을 활성화해야 하는데, 보안을 활성화할 경우에 각 노드별로 SSL 통신을 하게된다. 이때 인증서가 필요한데, 인증서 작업을 해야 한다. 중요한 것은 인증서를 한 […]
Kubernetes API 서버 인증서에 도메인 추가하기
Kubernetes API 서버는 http 를 통해서 쿠버네티스에 대한 연산을 제공해 준다. kubectl 명령어로 실행되는 것들은 모두 API 서버를 거쳐서 이루어진다. 하지만 API 서버는 인증서를 기반으로 통신이 이루어지는데, 이 인증서에 기재된 도메인이나 IP가 아니면 통신이 이루어지지 않는다.
|
1 |
kubectl unable to connect to server: x509: certificate signed by unknown authority |
API 서버의 인증서는 SAN 인증서여야 한다. 도메인 리스트를 가지고 있는 SAN 인증서. 현재 API 서버의 인증서 상태는 다음과 같다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ openssl x509 -text -in /etc/kubernetes/pki/apiserver.crt -noout X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Basic Constraints: critical CA:FALSE X509v3 Authority Key Identifier: keyid:98:B6:19:7B:C4:FF:03:49:74:7D:F3:F1:7E:31:67:91:D9:2E:B5:EA X509v3 Subject Alternative Name: DNS:haproxy2.systemv.local, DNS:kmaster, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:ol85.systemv.local, DNS:rhel8.systemv.local, IP Address:10.96.0.1, IP Address:192.168.96.23, IP Address:192.168.96.30, IP Address:192.168.96.7 Signature Algorithm: sha256WithRSAEncryption |
위 apiserver.crt 파일 상태를 보면 SAN 에 이미 도메인과 IP 들이 들어가 있다. 내용을 보면 haproxy2.systemv.local 도메인, 192.168.96.7 IP 가 들어가 있는데 이 […]
Kubernetes 의 Role Based Access Control(RBAC)
쿠버네티스는 RBAC 기반으로 허가권(Permission) 을 조정하도록 설계 되었다. 그런데, 쿠버네티스는 다음과 같이 네가지의 Role 관련 리소스를 가지고 있다. 그 차이는 다음과 같다. ClusterRole – 전체 클러스터에 적용하기 위한 역할(Role) 에 할당된 허가권(Permission) ClusterRoleBinding – 특정 계정(Account) 에 ClusterRole 을 바인딩 Role – 특정 네임스페이스에 적용하기 위한 역할(Role) 에 할당된 허가권(Permission) RoleBinding – 특정 계정(Account) 에 Role 을 바인딩 RBAC 을 적용하기 위해서는 계정이 필요하다. 이 계정은 쿠버네티스의 사용자를 말하는것이 아닌 쿠버네티스에서 운영되는 자원에 대한 계정을 말한다. 예를들어 ingress-nginx 라는 계정을 […]
Istio, Pod CrashLoopBackOff 해결하기
Istio 를 설치하고 Pod 를 생성했는데, 다음과 같이 오류가 발생했다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
]$ kubectl describe pod/employee-producer-866cfb8cf8-s2qk4 Init Containers: istio-init: Container ID: containerd://eb85c7971088c72e64b432a38f419a392182a44735281993c0c2b44460acd8fc Image: docker.io/istio/proxyv2:1.13.1 Image ID: docker.io/istio/proxyv2@sha256:099ee79c150829471270a14520506b83117bb7448cc80ba215617785237c1eb0 Port: <none> Host Port: <none> Args: istio-iptables .... State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: Error Exit Code: 255 Started: Mon, 28 Feb 2022 13:07:52 +0900 Finished: Mon, 28 Feb 2022 13:07:52 +0900 ... |
istio-init 컨테이너가 오류가 발생한 것을 알 수 있다. Pod 안에 컨테이너가 여러개일 경우에 컨테이너 로그를 봐야하는데 다음과 같이 Pod 에 속한 컨테이너 로그를 볼수 있다.
|
1 2 3 4 5 6 7 8 |
]$ kubectl logs employee-producer-866cfb8cf8-spnqs -c istio-init COMMIT 2022-02-28T04:16:59.895565Z info Running command: iptables-restore --noflush /tmp/iptables-rules-1646021819895421411.txt3256082129 2022-02-28T04:16:59.896995Z error Command error output: xtables parameter problem: iptables-restore: unable to initialize table 'nat' Error occurred at line: 1 Try `iptables-restore -h' or 'iptables-restore --help' for more information. 2022-02-28T04:16:59.897030Z error Failed to execute: iptables-restore --noflush /tmp/iptables-rules-1646021819895421411.txt3256082129, exit status 2 |
이 문제는 istio cni 컴포넌트를 함께 설치해주면 된다. 보통 Istio 를 설치할때에 Profile 만 지정하는데, demo 프로파일에 경우에 CNI 를 설치하지 않는다. 다음과 같이 재설치를 해준다.
|
1 2 |
]$ istioctl x uninstall --purge # 삭제 ]$ istioctl install --set profile=demo --set components.cni.enabled=true -y |
이렇게 CNI 를 활성화해서 재설치를 하면 문제없이 작동 된다. 문제점 여기서 한가지 문제가 있다. CNI 는 […]
Istio 설치
Istio 는 쿠버네티스의 Network 레벨의 Mesh 서비스다. 비교하자면 Netflix OSS 에 Ribbon 과 비슷하다고 볼 수 있다. Istio 설치 방법 Istio 설치 방법은 다양하다. 처음에 Istio 를 시작할때에 가장 헷깔리는 것이 바로 설치 방법이다. 구글에서 검색을 하면 설치방법이 나오지만 읽어보면 제각각인 이유가 다양한 설치 방법 때문이다. 그래서인지 Istio 홈페이지에서 다양한 설치 방법을 적어놨는데 대략 3가지 방법이 많이 쓰인다. Install with Istioctl Install with Helm Install Istio Operator 여기서는 Istoctl 을 이용해 설치하는 법을 다룬다. 이 방법은 다음 문서에 잘 나와 […]