쿠버네티스 공식 페이지에는 ingress nginx에 대한 설명이 되어 있다. 

https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md


기본은 아래와 같다. 

https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml


특이할 점은 service는 따로 정의되어 있지 않지만, ingress-nginx namespace가 디폴트로 사용됨을 알 수 있다.


한편, aws에서 l7을 사용하려면 loadbalancer type을  사용하는 것을 참고할 수 있다.

https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/aws/service-l7.yaml


spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: http



이후 아래 링크에서 응용 버전을 참고할 수 있다.


https://knight76.tistory.com/entry/kubernetes-ingress-nginx-%EC%84%A4%EC%A0%95-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0



Posted by '김용환'
,


kubernetes에서는 네임 스페이스를 줘서 상태 정보를 확인한다. 



$ kubectl get pods  -n capture

NAME                             READY   STATUS    RESTARTS   AGE

phantom-server-f597bbbb6-24pww   1/1     Running   0          1d

phantom-server-f597bbbb6-2vljz   1/1     Running   0          1d

phantom-server-f597bbbb6-z7fk5   1/1     Running   0          1d




특정 노드에 대한 로그를 확인할 때도 네임 스페이스를 지정해야 한다.


$ kubectl logs -f phantom-server-f597bbbb6-24pww -n capture

(로그)




따라서 3개의 pods를 모두 보려면 pod 별로 호출해야 한다.



하지만, 

https://github.com/wercker/stern를 사용하면 예쁘게 많은 pods 로그를 쉽게 볼 수 있다. 

맥이라면 brew install stern으로 설치한다.



$ stern phantom-server-f597bbbb6-z7fk5 --namespace capture

(예쁘게 로그)




3개의 포드에 대한 로그를 보려면 다음 커맨드를 실행한다.


$ stern phantom-server --namespace capture





또한 동일한 방식으로 ingress 로그도 출력할 수 있다.



$ kubectl logs ingress-nginx-controller-lh75d  -n ingress-nginx

->


$ stern ingress-nginx-controller  -n ingress-nginx




Posted by '김용환'
,


default namespace 앱을 새로운 namespace로 옮길 때 이슈가 발생할 수 있다.


k8s는 기본적으로 기존 정보를 모른다. 

default namespace에 올린 service,ingress,pods는 그대로 둔채..

새로운 namespace에 service, ingress,pods는 뜬다.


이때 ingress는 같은 포트를 사용하기 때문에 에러가 당연히 발생한다.

디폴트의 ingress는 종료시키고, 새로운 namespace의 ingress는 떠있게 한다.

그리고 default service, pods도 일일이 종료 시킨다. 


다음과 같이 나오면 정상이다. 



$ kubectl get ingress

x


$ kubectl get ingress -n <새로운 namespace>

새로운 ingress


Posted by '김용환'
,



<mac OS>


시스템 환경설정 ->

네트워크 ->

이더넷(또는 와이파이)에서 고급 선택 ->

하드웨어 탭에서 MAC 주소





<윈도우>


윈도수 ->

설정 ->

네트워크 및 인터넷 ->

Wi-Fi -> 하드웨어 속성    (또는) 이더넷 -> 하드웨어 속성   -> 

물리적 주소(MAC) 



Posted by '김용환'
,


Service, Ingress 설정을 주고 ingress 확인하기


아래와 같은 k8s으로 kubectl apply 적용했다.

---
apiVersion: v1
kind: Service
metadata:
name: phantomjs-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 3001
selector:
app: phantom-server
---
apiVersion: app/v1beta2
kind: Ingress
metadata:
name: phantomjs-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/rewrite-target: /
ingress.kubernetes.io/proxy-body-size: 10m
nginx.org/client-max-body-size: 10m
spec:
rules:
- host: capture.internal.google.com
http:
paths:
- path: /
backend:
serviceName: phantomjs-service
servicePort: 80



 ingress-nginx 네임스페이스를 확인한다.


$ kubectl get pods -n ingress-nginx

NAME                               READY   STATUS    RESTARTS   AGE

default-backend-55d45476bb-q9cwd   1/1     Running   0          14d

ingress-nginx-controller-ff5ht     1/1     Running   0          1d






docker에서 다음을 실행하면 nginx 설정을 확인할 수 있다.

$ kubectl -n ingress-nginx exec -it ingress-nginx-controller-ff5ht /bin/bash

쉘) cat /etc/nginx/nginx.conf





지금까지의 작업을 한 커맨드로 사용해 namespace에 nginx ingress가 하나 밖에 없다면 다음과 같이 쉽게 볼 수 있다.


$ kubectl exec -it -n ingress-nginx $(kubectl -n ingress-nginx get pods | grep ingress-nginx-controller | grep Running | awk '{print $1}' | head -n 1) cat /etc/nginx/nginx.conf 



ingress docker 내부 vi로 보고 싶다면, vi가 설치가 안되어 있어서 보기 어렵다. '| vi - '를 추가한다.


$ kubectl exec -it -n ingress-nginx $(kubectl -n ingress-nginx get pods | grep ingress-nginx-controller | grep Running | awk '{print $1}' | head -n 1) cat /etc/nginx/nginx.conf | vi -





Posted by '김용환'
,


'근성없고 화내는'이라는 뜻이 있지만 

(참고 https://reckon.tistory.com/2186)


소프트웨어 세상에서는 

ansible과 같은 설정 관리 툴로 특정 OS에서 소프트웨어/애플리케이션을 설치 및 설정 한후 

운영을 진행하다 세월이 흘러, 운영체제와 설치소프트웨어도 조금씩 달라진다. 따라서 ansible만 해도 조금씩 playbook을 다르게 써야 하는 경우가 있다. 

이런 환경을 snowflake(눈송이) 시스템이라고 한다.


도커 환경에서 이런 운영 환경을 이겨낼 수 있기에 

docker/cloud /kubernetes 환경에서 기존 레거시와 차별하기 위해 사용되고 있다. 


'영어앤영문권' 카테고리의 다른 글

Stalemate- 교착 상태  (0) 2019.08.24
개발자 영어 - HTTP의 조건부 GET(conditional get)  (0) 2018.08.31
self-contained system (SCS) 번역  (0) 2018.08.28
authz, authn  (0) 2018.08.10
BYOD  (0) 2018.07.28
Posted by '김용환'
,


nginx를 ingress로 사용하는 kubernetes에서 body 크기(jpeg같은 image)때문에 ingress를 통과 못할 수 있다. 413 에러가 나타나는 이유이다.

이럴 때는 client_max_body_size를 설정한다.


ingress.kubernetes.io/proxy-body-size: 10m



참고

https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#custom-max-body-size

Posted by '김용환'
,


namespace를 쿠버네티스 deployment 설정에 넣는 것이 좋은 줄 알았는데,

막상 운영해보니, ingress에 namespace에 영향을 미치고

공통 파일 관리가 어렵다.

apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: phantom-server
namespace: phantom


namespace를 커맨드 라인에서 전달한다면 편하다. 

apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: phantom-server


$ kubectl apply -f kubernetes.yml --namespace=phantom


Posted by '김용환'
,



deployment -> pods 생성했다면.

pods 먼저 삭제하면 다시 실행되기 때문에..

deployment -> pods 순서대로 삭제해야 한다. 




[~] kubectl get deployments

NAME             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE

phantom-server   1         1         1            1           51m


[~] kubectl get pods

NAME                              READY   STATUS    RESTARTS   AGE

phantom-server-649c56b6b7-nkmjd   1/1     Running   0          18m


[~] kubectl get pods

NAME                              READY   STATUS    RESTARTS   AGE

phantom-server-649c56b6b7-wgtdl   1/1     Running   0          1m

[~]

[~]

[~]

[~] kubectl get pods

NAME                              READY   STATUS    RESTARTS   AGE

phantom-server-649c56b6b7-mtxn8   1/1     Running   0          28m

[~] kubectl delete pods phantom-server-649c56b6b7-mtxn8

pod "phantom-server-649c56b6b7-mtxn8" deleted

[~] kubectl get pods

NAME                              READY   STATUS        RESTARTS   AGE

phantom-server-649c56b6b7-mtxn8   1/1     Terminating   0          28m

phantom-server-649c56b6b7-wgtdl   1/1     Running       0          21s




->




[~] kubectl delete deployment phantom-server

deployment.extensions "phantom-server" deleted

[~] kubectl delete pods phantom-server-649c56b6b7-nkmjd

pod "phantom-server-649c56b6b7-nkmjd" deleted



마찬가지로


cronjob -> job -> pods 로 생성된다면


먼저 cronjob을 생성하고 차례대로 job, pods를 삭제해야 제대로 삭제된다.




하지만, namespace를 삭제하면 namespace 밑의 모든 service, ingress, nodeport, pods가 삭제되니 참고..

Posted by '김용환'
,

MacOS에서 

특정 도메인에 내가 보고 싶은 ip를 보고 싶으면, 다음과 같이 진행한다.

리눅스에서는 /etc/hosts만 진행하면 되나, MacOS에서는 dns cacheflush를 따로 호출해야 한다. 



<ip 설정 (1대 반영 장비) >


$sudo vi /private/etc/hosts

192.168.38.93   shopping.google.com

$dscacheutil -flushcache



Posted by '김용환'
,