Jun 19, 2020 - Istio와 K8s Dashboard

한창 k8s cluster와 elasticsearch, queryhandler를 정비하고 있다. 대충 그림은 다 나왔고 이제 detail을 챙기면서 chaos test와 tps 측정을 거치면 끝날 것 같다. ingress로 istio를 쓰면서 나쁜 것 같진 않은데 k8s 기본 ingress와 참 달라서 힘들고, 인지도 대비 참조 문서량이 적다. 돌아보면 nginx가 제일 편하고 초보자 문서가 많다.

지금의 최고 난이도 문제는 request 100회를 날리면 대부분 http 200이지만 502가 10개 정도 뜬다는 것이다. 근데 이게 뭐땀시 저런지 도통 감이 없다..🙄

아무튼 istio endpoint로 1개 vip를 쓰고 있고, 사정상… 모든 api와 관리 ui도 여기에 싹 우겨넣었다. 그러나 https를 요구하는 kubernetes dashboard는 쉽게 세팅되지 않았다. 암만 구글링해도 속 시원한 답은 없다. 그래서 내가 검색 문서를 만들어야지 안되겠다.


kubernetes dashboard with istio ingressgateway - expose https & http both (tls passthrough and http redirected)

expected behavior

with istio ingressgateway, can access https://dashboard.com and http://dashboard.com

version

  • istio-1.6.3
  • official k8s dashboard-2.0.1

what todo

  1. set custom certs in your dashboard deployment not occuring browser error with your domain ref
  2. istio gateway with httpsRedirect: true and mode: PASSTHROUGH ref
  3. istio virtualservice with http and tls
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-gateway
  namespace: some-config-namespace
spec:
  selector:
    app: my-gateway-controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - dashboard.com
    tls:
      httpsRedirect: true # sends 301 redirect for http requests
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - dashboard.com
    tls:
      mode: PASSTHROUGH
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: some-route
spec:
  hosts:
  - dashboard.com
  http:
  - name: foo
    match:
    - uri:
        prefix: /
    route:
    - destination:
        host: <dashboard>
  tls:
  - match:
      sniHosts:
      - dashboard.com
    route:
    - destination:
        host: <dashboard>

test it using curl -k -v. you can see status code 200 for https, 301 for http.

Jun 7, 2020 - Reproducibility

k8s를 on premise로 설치하는 것 부터가 쉽지 않다. 😑 ha 구성하고 네트워크가 난관이라 여러번 깔고 지우고 하는데 reproducibility라는 개념이 참 중요하단 걸 또 다시 느꼈다.

reproducibility라는 개념은 원래 data science를 공부하면서 배웠다. 요는 분석 결과만 딸랑 보여주지 말고 그걸 똑같이 재현할 수 있는 소스 코드를 달라는 것이다. 이걸 배운 이후로 누구나(특히 미래의 내가) 따라할 수 있게 코드를 정리해야한다는 강박증이 생긴 것 같다.

점점 개발을 할수록 사람을 믿으면 안되고 시스템을 믿어야된다는 생각이 강해진다. 나에게 시스템이란 습관이나 일하는 방식 같은 것을 뜻하는 말이다.

reproducible code를 만들고 약간의 markdown으로 설명을 달아주면 구조화된 code base이자 일종의 시스템이 된다. 나랑 같이 일하는 사람은 이걸 보고 같이 따라할 수 있고 미래의 나도 똑같은 일을 반복하지 않아도 된다.

이걸 만드는게 처음엔 귀찮긴 하지만 습관이 되면 정말 편안하고 내 시간과 노력을 절약해준다는걸 체감하게 된다. 그러면 점점 이 습관을 좋게 만드는 것에 관심이 간다. 스스로 지속적으로 수정 및 피드백을 거듭하면서 점차 완성도가 올라가고 나중에 돌아보면 이게 곧 실력의 베이스가 되는 것 같다.

생각보다 나 자신의 향상을 위해 거창한 건 필요하지 않은 것 같다. 그저 남들 다 아는 얘기를 실천하는 것만으로도 충분한 것 같다. 안하는게 문제지🙄

이건 일기일까 개발 문서일까

Jun 3, 2020 - 꽃으로도 때리지 말라

생활 속 미운 녀석들을 보다가 문득 깨달은게 있다.

정말로 그들은 악의를 가지고 저러는 걸까? 아니다. 그냥 그렇게 하는게 그럴듯하니까 저러는 거다. 뭔가 이득을 얻거나 감정적으로 압박 받거나 어떠한 믿음이 있거나 아무것도 모르거나 뭔가 사정이 있겠지. 어쨌든 각자가 내리는 최선의 선택인 거다.

나도 돌아보면 실패와 사고도 많았지. 그것도 다 잘해보려는 마음으로 열심히 했던거고. 결과적으로 마음에서 솟아나는 감정이나 생각은 그다지 신뢰성이 높지 않다. 마음은 겁이 많으며 방법을 몰라서 이것 저것 해보는 초심자와 같다.

꽃으로도 때리지 말라는 속담이 진심으로 이해가 된다. 그건 뒤지게 패고 싶어도 꾹 참으라는 말이 아니었다. 때리고 싶은 마음부터 돌아보라는 의미일 것이다.