728x90
반응형
###Overview

브라우저에서 많이 사용되는 HTTPS의 경우에도 공식적으로 발급한 인증키를 이용하여 데이터를 암호화하여 전달 하도록 구성되어 있다.

위와 같은 방식으로 데이터를 전달하면 중간에 해커 등이 데이터를 가로채도(MITM 공격) 데이터를 복호화 할수가 없게 된다. (서버만이 이를 해석할 수 있는 Private Key를 가지므로)

하지만 웹브라우저에서 Istio Ingress Gateway 까지는 안전하게 데이터가 보호되지만, k8s 클러스터 내부에서는 통신 같은 경우 변조되거나 손실 될 수도 있다.

그러나 수많은 마이크로서비스 간 통신에 https 적용하는 것은 복잡하고 많은 시간/자원 소요, 상대적으로 느린 처리속도가 발생한다.

특히 클라우드 같은 경우 하나의 서버 또는 하나의 존으로 구성되지 않으며 다수의 노드들 간의 연결로 구성되는 복잡한 형태로 되어 있다. (ap-northeast-2a, ap-northeast-2b 등등)

Istio를 이용해서 mTLS(Mutual TLS)를 적용하게 되면, TLS가 아닌 모든 통신은 차단하여 불법적인 접근을 막아준다.

Pod 내부의 통신은 localhost에서 동작한다 즉 네트워크 카드를 통하지 않으므로 외부에서 접근 자체가 불가능 따라서 Pod 내부적으로 Container 간에는 http 사용 가능하다

다른 Pod 끼리의 통신은 Istio-proxy container가 대신하여 통신하는데 이때 proxy container 끼리는 TLS 통신으로 안전하게 통신한다.

istio 1.5부터는 자동으로 proxy 간 통신에 TLS가 적용되었다. kiali를 통해 확인 가능

해당 자물쇠 모양이 TLS 적용 되었다는 것을 뜻한다.

  1. Permissive mTLS

위와 같이 Istio가 제어할 수 없는 Pod에서 Http 전송하는 경우가 있다면 Permissive mTLS 이용 해야 한다.

서비스의 http 접근을 위해 노드포트로 개방

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"fleetman-position-tracker","namespace":"default"},"spec":{"ports":[{"name":"http","port":8080}],"selector":{"app":"position-tracker"},"type":"ClusterIP"}}
  creationTimestamp: "2023-11-13T05:17:01Z"
  name: fleetman-position-tracker
  namespace: default
  resourceVersion: "5307171"
  uid: 1e1771d6-8714-4f3e-bace-828a5e052d19
spec:
  clusterIP: 10.233.37.37
  clusterIPs:
  - 10.233.37.37
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: http
    nodePort: 32000
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: position-tracker
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

fleetman-position-tracker 서비스의 32000포트를 노드포트로 열었다.

root # kubectl get pod -o wide
NAME                                           READY   STATUS    RESTARTS      AGE   IP               NODE                NOMINATED NODE   READINESS GATES
api-gateway-57b8dc6b6d-trdhf                   2/2     Running   0             15m   10.233.125.173   mng-kube-dev1   <none>           <none>
details-v1-7745b6fcf4-scgmn                    2/2     Running   2 (13d ago)   13d   10.233.119.77    mng-kube-dev3   <none>           <none>
dnsutils                                       2/2     Running   2 (13d ago)   13d   10.233.119.87    mng-kube-dev3   <none>           <none>
position-simulator-d76977c-vttbj               2/2     Running   0             15m   10.233.94.107    mng-kube-dev2   <none>           <none>
position-tracker-5fc869955f-xmvzq              2/2     Running   0             15m   10.233.125.174   mng-kube-dev1   <none>           <none>
productpage-v1-6f89b6c557-27cpp                2/2     Running   2 (13d ago)   13d   10.233.119.75    mng-kube-dev3   <none>           <none>
ratings-v1-77bdbf89bb-j84zk                    2/2     Running   2 (13d ago)   13d   10.233.119.78    mng-kube-dev3   <none>           <none>
reviews-v1-667b5cc65d-v6bgm                    2/2     Running   2 (13d ago)   13d   10.233.119.79    mng-kube-dev3   <none>           <none>
reviews-v2-6f76498fc8-bq6lq                    2/2     Running   2 (13d ago)   13d   10.233.119.88    mng-kube-dev3   <none>           <none>
reviews-v3-5d8667cc66-kwmk4                    2/2     Running   2 (13d ago)   13d   10.233.119.81    mng-kube-dev3   <none>           <none>
staff-service-549787d74-g9qzp                  2/2     Running   0             15m   10.233.94.106    mng-kube-dev2   <none>           <none>
staff-service-risky-version-67fc49944c-lrlcs   2/2     Running   0             15m   10.233.119.118   mng-kube-dev3   <none>           <none>
vehicle-telemetry-5b8cb65d5-jlnkz              2/2     Running   0             15m   10.233.119.114   mng-kube-dev3   <none>           <none>
webapp-5c79796df5-6cc7c                        2/2     Running   0             15m   10.233.119.119   mng-kube-dev3   <none>           <none>

fleetman-position-tracker 서비스의 파드가 어느 노드에 떳는지 확인

position-tracker-5fc869955f-xmvzq              2/2     Running   0             15m   10.233.125.174   mng-kube-dev1   <none>           <none> 

sri-mng-kube-dev1에 떠있는 것을 확인 했다.

root # curl http://192.168.2.124:32000/vehicles/
[{"name":"Huddersfield Truck A","lat":53.6099460,"lng":-1.8139280,"timestamp":"2023-11-13T05:31:22.565+0000","speed":24.7517309806046603544},{"name":"London Riverside","lat":51.5112820,"lng":-0.1003120,"timestamp":"2023-11-13T05:31:22.139+0000","speed":17.2594644682047764384},{"name":"City Truck","lat":53.37262733839452266693115234375,"lng":-1.484639234840869903564453125,"timestamp":"2023-11-13T05:31:33.279+0000","speed":7.4770534017002185024},{"name":"Village Truck","lat":53.2844950,"lng":-1.6663290,"timestamp":"2023-11-13T05:31:09.810+0000","speed":25.3164561038853680528},{"name":"Huddersfield Truck B","lat":53.6204240,"lng":-1.8052050,"timestamp":"2023-11-13T05:31:34.307+0000","speed":6.02688378286800533520}]

curl로 노드포트로 호출 해보면 호출이 된다.

kiali에서도보면 fleetman-position-tracker로 호출 되지만 자물쇠가 없는 것으로 보인다.

  1. Strict mTLS

이 옵션은 어떤 외부의 접속이라도 TLS가 적용 되지 않으면 접속을 완전히 차단하는 방식이다.

PeerAuthentication 이라는 리소스를 사용하여 모드를 설정한다.

apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "default"
  namespace: "istio-system"
spec:
  mtls:
    mode: STRICT

확인

root # kubectl get peerauthentication -A
NAMESPACE      NAME      MODE     AGE
istio-system   default   STRICT   94s

잘 생성 되었고 curl 호출 해보면

root # curl http://192.168.2.124:32000/vehicles/
curl: (56) Recv failure: Connection reset by peer



root # curl https://192.168.2.124:32000/vehicles/
curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

호출이 막힌 것으로 보인다.

728x90
300x250

'IT > Istio' 카테고리의 다른 글

Istio Traffic Management 트래픽 통제하기  (0) 2023.11.10
서킷 브레이킹  (0) 2023.11.10

+ Recent posts