Cilium Hubble 설치 예제
    • PDF

    Cilium Hubble 설치 예제

    • PDF

    기사 요약

    VPC 환경에서 이용 가능합니다.

    Ncloud Kubernetes Service에 Cilium Hubble을 설치하여 클러스터 내의 네트워크 모니터링을 제공합니다.

    제약 사항

    신규 설치 및 업그레이드후에 Hubble이 활성화된 클러스터에서 제공합니다. 아래 명령어를 실행하여 해당 클러스터에 Hubble이 활성화되어 있는지 확인할 수 있습니다.

    $ kubectl -n kube-system get configmap cilium-config -o jsonpath='{.data.enable-hubble}'
    true
    

    Hubble 설치

    Hubble 설치 방법을 설명합니다.

    1. 다음 코드를 복사하여 hubble.yaml 파일로 작성해 주십시오.

      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: "hubble-relay"
        namespace: kube-system
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: "hubble-ui"
        namespace: kube-system
      ---
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: hubble-relay-config
        namespace: kube-system
      data:
        config.yaml: |
          cluster-name: default
          peer-service: "hubble-peer.kube-system.svc.cluster.local:443"
          listen-address: :4245
          dial-timeout:
          retry-timeout:
          sort-buffer-len-max:
          sort-buffer-drain-timeout:
          tls-client-cert-file: /var/lib/hubble-relay/tls/client.crt
          tls-client-key-file: /var/lib/hubble-relay/tls/client.key
          tls-hubble-server-ca-files: /var/lib/hubble-relay/tls/hubble-server-ca.crt
          disable-server-tls: true
      ---
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: hubble-ui-nginx
        namespace: kube-system
      data:
        nginx.conf: |
          server {
              listen       8081;
              server_name  localhost;
              root /app;
              index index.html;
              client_max_body_size 1g;
              location / {
                  proxy_set_header host $host;
                  proxy_set_header x-real-ip $remote_addr;
                  # cors
                  add_header access-control-allow-methods "get, post, put, head, delete, options";
                  add_header access-control-allow-origin *;
                  add_header access-control-max-age 1728000;
                  add_header access-control-expose-headers content-length,grpc-status,grpc-message;
                  add_header access-control-allow-headers range,keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout;
                  if ($request_method = options) {
                      return 204;
                  }
                  # /cors
                  location /api {
                      proxy_http_version 1.1;
                      proxy_pass_request_headers on;
                      proxy_hide_header access-control-allow-origin;
                      proxy_pass http://127.0.0.1:8090;
                  }
                  location / {
                      try_files $uri $uri/ /index.html /index.html;
                  }
              }
          }
      ---
      kind: ClusterRole
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: hubble-ui
        labels:
          app.kubernetes.io/part-of: cilium
      rules:
        - apiGroups:
            - networking.k8s.io
          resources:
            - networkpolicies
          verbs:
            - get
            - list
            - watch
        - apiGroups:
            - ""
          resources:
            - componentstatuses
            - endpoints
            - namespaces
            - nodes
            - pods
            - services
          verbs:
            - get
            - list
            - watch
        - apiGroups:
            - apiextensions.k8s.io
          resources:
            - customresourcedefinitions
          verbs:
            - get
            - list
            - watch
        - apiGroups:
            - cilium.io
          resources:
            - "*"
          verbs:
            - get
            - list
            - watch
      ---
      kind: ClusterRoleBinding
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: hubble-ui
        labels:
          app.kubernetes.io/part-of: cilium
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: hubble-ui
      subjects:
        - kind: ServiceAccount
          name: "hubble-ui"
          namespace: kube-system
      ---
      kind: Service
      apiVersion: v1
      metadata:
        name: hubble-relay
        namespace: kube-system
        labels:
          k8s-app: hubble-relay
          app.kubernetes.io/name: hubble-relay
          app.kubernetes.io/part-of: cilium
      spec:
        type: "ClusterIP"
        selector:
          k8s-app: hubble-relay
        ports:
          - protocol: TCP
            port: 80
            targetPort: 4245
      ---
      kind: Service
      apiVersion: v1
      metadata:
        name: hubble-ui
        namespace: kube-system
        labels:
          k8s-app: hubble-ui
          app.kubernetes.io/name: hubble-ui
          app.kubernetes.io/part-of: cilium
      spec:
        type: "ClusterIP"
        selector:
          k8s-app: hubble-ui
        ports:
          - name: http
            port: 80
            targetPort: 8081
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: hubble-peer
        namespace: kube-system
        labels:
          k8s-app: cilium
          app.kubernetes.io/part-of: cilium
          app.kubernetes.io/name: hubble-peer
      spec:
        selector:
          k8s-app: cilium
        ports:
          - name: peer-service
            port: 443
            protocol: TCP
            targetPort: 4244
        internalTrafficPolicy: Local
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: hubble-relay
        namespace: kube-system
        labels:
          k8s-app: hubble-relay
          app.kubernetes.io/name: hubble-relay
          app.kubernetes.io/part-of: cilium
      spec:
        replicas: 1
        selector:
          matchLabels:
            k8s-app: hubble-relay
        strategy:
          rollingUpdate:
            maxUnavailable: 1
          type: RollingUpdate
        template:
          metadata:
            labels:
              k8s-app: hubble-relay
              app.kubernetes.io/name: hubble-relay
              app.kubernetes.io/part-of: cilium
          spec:
            containers:
              - name: hubble-relay
                image: "quay.io/cilium/hubble-relay:v1.13.12"
                imagePullPolicy: IfNotPresent
                command:
                  - hubble-relay
                args:
                  - serve
                ports:
                  - name: grpc
                    containerPort: 4245
                readinessProbe:
                  tcpSocket:
                    port: grpc
                livenessProbe:
                  tcpSocket:
                    port: grpc
                volumeMounts:
                  - name: config
                    mountPath: /etc/hubble-relay
                    readOnly: true
                  - name: tls
                    mountPath: /var/lib/hubble-relay/tls
                    readOnly: true
                terminationMessagePolicy: FallbackToLogsOnError
            restartPolicy: Always
            serviceAccountName: "hubble-relay"
            automountServiceAccountToken: false
            terminationGracePeriodSeconds: 1
            affinity:
              podAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  - labelSelector:
                      matchLabels:
                        k8s-app: cilium
                    topologyKey: kubernetes.io/hostname
            nodeSelector:
              kubernetes.io/os: linux
            volumes:
              - name: config
                configMap:
                  name: hubble-relay-config
                  items:
                    - key: config.yaml
                      path: config.yaml
              - name: tls
                projected:
                  # note: the leading zero means this number is in octal representation: do not remove it
                  defaultMode: 0400
                  sources:
                    - secret:
                        name: hubble-relay-client-certs
                        items:
                          - key: ca.crt
                            path: hubble-server-ca.crt
                          - key: tls.crt
                            path: client.crt
                          - key: tls.key
                            path: client.key
      ---
      kind: Deployment
      apiVersion: apps/v1
      metadata:
        name: hubble-ui
        namespace: kube-system
        labels:
          k8s-app: hubble-ui
          app.kubernetes.io/name: hubble-ui
          app.kubernetes.io/part-of: cilium
      spec:
        replicas: 1
        selector:
          matchLabels:
            k8s-app: hubble-ui
        strategy:
          rollingUpdate:
            maxUnavailable: 1
          type: RollingUpdate
        template:
          metadata:
            labels:
              k8s-app: hubble-ui
              app.kubernetes.io/name: hubble-ui
              app.kubernetes.io/part-of: cilium
          spec:
            securityContext:
              fsGroup: 1001
              runAsGroup: 1001
              runAsUser: 1001
            serviceAccountName: "hubble-ui"
            automountServiceAccountToken: true
            containers:
              - name: frontend
                image: "quay.io/cilium/hubble-ui:v0.13.0"
                imagePullPolicy: IfNotPresent
                ports:
                  - name: http
                    containerPort: 8081
                volumeMounts:
                  - name: hubble-ui-nginx-conf
                    mountPath: /etc/nginx/conf.d/default.conf
                    subPath: nginx.conf
                  - name: tmp-dir
                    mountPath: /tmp
                terminationMessagePolicy: FallbackToLogsOnError
              - name: backend
                image: "quay.io/cilium/hubble-ui-backend:v0.13.0"
                imagePullPolicy: IfNotPresent
                env:
                  - name: EVENTS_SERVER_PORT
                    value: "8090"
                  - name: FLOWS_API_ADDR
                    value: "hubble-relay:80"
                ports:
                  - name: grpc
                    containerPort: 8090
                terminationMessagePolicy: FallbackToLogsOnError
            nodeSelector:
              kubernetes.io/os: linux
            volumes:
              - configMap:
                  defaultMode: 420
                  name: hubble-ui-nginx
                name: hubble-ui-nginx-conf
              - emptyDir: {}
                name: tmp-dir
      
    2. 다음 명령을 실행하여 Hubble을 배포해 주십시오.

      $ kubectl apply -f hubble.yaml
      
    3. 다음 명령을 실행하여 Hubble UI에 대한 port-forward 설정을 완료해 주십시오.

      $ kubectl -n kube-system port-forward svc/hubble-ui 12000:80
      
    4. 웹 브라우저에서 http://localhost:12000을 입력하여 Hubble UI에 접근해 주십시오.


    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.