반응형

항상 환경부가 관리하는 충전기를 이용해서 전기차를 충전하다가 오늘은 GS칼텍스에서 충전해봤다.

서울 서초구 남부터미널 근처에 있는 연일주유소에 갔고, 설치한지 얼마 안 되서 그런지 충전기가 깨끗했다.

충전기 2개 모두 비어있어서, 기다리지 않고 바로 충전할 수 있었다.

 

충전하고 10분쯤 지났을 때 충전기 화면

 

 

직접 GS 칼텍스에서 충전해보니, 환경부 충전기보다 좋은 점은 이렇다.

충전 속도가 빠르다.

내 차(아이오닉 2020년식)는 환경부 급속충전기에 연결하면, 여름 기준으로  34~37kW/h 정도인데 GS칼텍스 충전기로는 45~47kW/h 정도 충전된다. 어림잡아 GS칼텍스 충전기가 20% 정도 충전속도가 더 빠르다.

 

충전 요금이 싸다.

현재(2021년 7월 23일) 222원/kW인데, 환경부 충전기보다 대략 30% 정도 싼 셈이다.

단, 222원/kW 요금으로 충전하려면 신용카드로 결제해야 한다. 만약 환경부 충전카드로 요금을 결제하면 로밍 요금이 적용되서 환경부에 고시된 비싼 금액으로 요금이 결제된다.

따라서 GS칼텍스에서 충전 요금 결제할 때는 반드시 신용카드로 결제하는 것이 금전적으로 유리하다.

 

관리가 잘 되어 있어서 고장이 적다.

고속도로 휴게소 또는 공영주차장에 있는 전기차 충전소에 가보면, 충전기가 고장난 상태로 방치된 경우가 많다.

전기차 배터리는 10% 정도 남았는데, 고장난 충전기 앞에 서 있다보면 화가 난다. 또 다른 충전기를 찾아가야 하기 때문이다.

GS칼텍스는 주유소 내에 충전기가 있고, 직원이 즉시 고장 관리를 해주니까 고장난 경우를 아직 못 봤다.

 

충전기 화면이 크고 시원시원하다.

일반 공용 충전기와 다르게 GS칼텍스 충전기는 화면이 많이 크다. 

그리고 충전할 때 선택할 수 있는 옵션도 여러 가지이다.

- kW 지정 방식: 10kW, 20kW와 같이 충전 용량을 지정해서 충전할 수 있다.
- 금액 지정 방식: 1,000원  3,000원  5,000원과 같이 금액을 지정해서 충전할 수 있다.
- 시간 지정 방식: 10분  30분과 같이 충전 시간을 지정할 수 있다.
- 퍼센트 지정 방식: 60%  80%와 같이 충전 퍼센트를 지정할 수 있다.

 

내 경우에는 "금액 지정 방식" 제일 편한 것 같다. 내 차의 배터리 용량을 알고 있고, 5천원을 충전하면 전체 배터리 용량의 55% 정도 충전되는 것을 알고 있기 때문에 현재 30% 미만으로 배터리가 떨어졌다면 5천원만 충전하면 된다.

그리고 이렇게 금액 지정방식으로 충전하면, 신용카드의 "결제 -> 취소 -> 결제"와 같이 지저분한 결제 이력이 남지 않아서 좋다.

다른 충전 지정 방식은 일단 높은 금액을 결제가 되고, 충전을 해보다가 잔여 금액이 생기면 다시 결제를 취소해주는 방식이다.

 

 

결론

비슷한 거리에 환경부 충전기랑 GS칼텍스 충전기가 있다면, GS칼텍스로 가는 것이 훨씬 이득이다.

충전속도 빠르고, 충전 요금도 저렴하니까.

반응형

Macbook을 새로 구입하고, .bash_profile을 작성할 때 참고하려고 작성했다.

 

#
# Greeting message
#   31 Red
#   32 Green
#   33 Yellow
#   34 Blue
#   35 Magenta
#   36 Cyan
#   Reference: https://en.wikipedia.org/wiki/ANSI_escape_code
#


# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

# For Ubuntu, CentOS
#OS_DESCRIPTION=$(lsb_release -d)
# For Mac OS
OS_DESCRIPTION=$(uname -srn)

echo "                                                "
echo "  Bourne Again Shell  Environment  for  Andrew "
echo "  $OS_DESCRIPTION "
echo "                                                "

#
# For core dumped file
#
ulimit -c unlimited

#
# Locale
#
## LC_CTYPE=ko_KR.utf8
export LC_ALL="en_US.UTF-8"
export LANGUAGE="en_US.UTF-8"

# export VIM=/usr/share/vim/vim74
export PATH=$PATH:/sbin:/usr/sbin:/usr/local/go/bin:./
export PATH=$PATH:/usr/local/Cellar/iftop/1.0pre4/sbin
export PATH=$PATH:$HOME/go/bin
export PATH=$PATH:$HOME/bin

ssh2() {
    ssh  -oStrictHostKeyChecking=no  -p 33322  $@
}

sftp2() {
    sftp  -oStrictHostKeyChecking=no  -P 33322  $@
}

mandump() {
    man $1 | col -bx > man_page_$1.txt
}

## For docker monitoring
docker_ip() {
    sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

mywhile() {
	while true; do date;  $2;  echo "";  echo "";  sleep $1;  done
}

conn_vpn() {
	sudo  openconnect --protocol=gp $1
}

## For Mac OS
get_cpu_mac() {
    # istats all
    istats cpu
}

## For Raspberry PI
get_cpu_pi() {
    my_cpu_temp=$(vcgencmd measure_temp)
    echo " *** Execute vcgencmd *** "
    echo "  + CPU Temperature : $my_cpu_temp "

    echo ""
    echo " *** Get information from /sys/class/thermal/thermal_zone0/temp *** "
    cpu=$(</sys/class/thermal/thermal_zone0/temp)
    echo "  + CPU Temperature : $((cpu/1000)) c "
}

## Kubernetes
kube_andrew() {
  export KUBECONFIG=~/Documents/kube_config/andrew
  kubectl config get-contexts
}

kube_peter() {
  export KUBECONFIG=~/Documents/kube_config/peter
  kubectl config get-contexts
}

## For Mac OS
export PS1="\h:\w > "


export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
source <(kubectl completion bash)
alias k=kubectl
complete -F __start_kubectl k

alias ls='ls -FG'

## For Mac OS
# defaults write .GlobalPreferences com.apple.mouse.scaling -23000
# efaults write -g com.apple.mouse.scaling 5

 

 

'Ubuntu' 카테고리의 다른 글

Install BIND for name server(DNS) on Ubuntu 22.04  (0) 2021.11.05
openssl command example  (0) 2021.11.04
.vimrc 작성  (0) 2021.07.22
iptables and netfilter  (1) 2021.07.10
tcpdump로 HTTP Packet Decode 하기 및 tshark 사용법  (0) 2021.07.10
반응형

VIM 편집기를 사용할 때, .vimrc 파일을 잘 작성하면 IDE만큼 편하게 쓸 수 있다.

각 항목을 잘 이해하고 .vimrc 파일을 설정하면 좋겠지만, 귀찮으면 그냥 아래 내용을 copy & paste하면 된다. :D

 

"
" Filename: .vimrc
"

syntax on

color koehler
set expandtab   " tab character를 whitespace로 자동 변환

set tags=./tags,/root/tags

set fileencodings=utf8,euc-kr
set smartcase   " 대문자가 검색어 문자열에 포함될 때에는 noignorecase
set ignorecase  " 검색시 대소문자 무시
set hlsearch    " 검색시 하이라이트(색상 강조)
set incsearch   " 검색 키워드 입력시 한 글자 입력할 때마다 점진 검색

set ruler       " 현재 커서 위치 (row, col) 좌표 출력
set noerrorbells    " 에러 알림음 끄기

set bs=indent,eol,start " backspace 키 사용 가능
set background=dark  " 검정배경을 사용할 때, (이 색상에 맞춰 문법 하이라이트 색상이 달라짐.)

set wmnu            " tab 자동완성시 가능한 목록을 보여줌
set shiftwidth=4    " shift를 4칸으로 ( >, >>, <, << 등의 명령어)
set tabstop=4       " tab을 4칸으로
"set tabstop=4 softtabstop=4 shiftwidth=4

set noimd       " no imdisable 한글 입력기 관련

set ai              " autoindent 자동 들여쓰기
set smartindent     " 자동 들여쓰기 "
set cindent         " C언어 자동 들여쓰기
set laststatus=2    " 상태바를 언제나 표시할 것
set sm              " 매치되는 괄호 표시 (= showmatch)
set history=1000    " vi 편집기록 기억갯수 .viminfo에 기록



" 마지막으로 수정된 곳에 커서를 위치함
au BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "norm g`\"" |
\ endif


au BufNewFile,BufReadPost *.c,*.h set cindent
au BufNewFile,BufReadPost *.cpp,*.cc source $VIM/syntax/cpp.vim
au BufNewFile,BufReadPost *.cpp,*.cc set cindent
au BufNewFile,BufReadPost *.go source $HOME/Git/shell_config/go.vim
au BufNewFile,BufReadPost *.tex source $VIM/syntax/tex.vim
au BufNewFile,BufReadPost *.tex set autoindent
au BufNewFile,BufReadPost *.java source $VIM/syntax/java.vim
au BufNewFile,BufReadPost *.java set cindent
au BufNewFile,BufReadPost *.html,*.htm source $VIM/syntax/html.vim
au BufNewFile,BufReadPost *.html,*.htm set smartindent


" Move tab for multiple files open
nnoremap <TAB> <C-W>w
nnoremap <S-TAB> <C-W>W

" vim-commentary
map gc <Plug>Commentary
nmap gcc <Plug>CommentaryLine

imap ,for for (idx = 0; idx < ; idx++) {<ENTER>}
imap ,if if () {<ENTER>}<ESC>kf(a
imap ,wh while () {<ENTER>}<ESC>kf(a
imap ,pr printf("%s %s(%d) \n", __func__, __FILE__, __LINE__);

ab _a@  #if 0 /* I would not use the following code */ <CR>#else<CR>#endif


" ctrl-j 로 라인을 분리.
nnoremap <NL> i<CR><ESC>

" copy , paste , select 기능 보완 -------------------------------
noremap <Space>y    "+y
nnoremap <Space>p   "+p
nnoremap <Space>a   gg<S-v>G

" navigation 기능 보완 ---------------------------------
nnoremap <Space>h ^
nnoremap <Space>l $
noremap <Space>j 8j
noremap <Space>k 8k


ab _el      MYLOG_ERR("%s:: \n", __func__);
ab _sl      MYLOG_SVC("%s::success\n", __func__);
ab _dl      MYLOG_DBG("%s:: \n", __func__);
반응형

  


 

공인된 CA가 아닌, 내가 CA가 되서 openssl 명령을 이용하여 Private Key를 Signing하고 Certificate을 생성하는 절차를 알아보자.

(2~3년에 한번씩 하는 작업이라서 메모하지 않으면 잊는다. 잘 메모해야지.. ㅠㅠ)

 

아래 예시 순서대로 따라서 실행하면 된다.

 

 

CA Certificate, Server Certificate 만들기

######################################################################
## 1)   Generate a Certificate Authority Certificate (CA Certificate)
######################################################################

##
## 1-a) Generate a CA certificate private key
##
$  openssl genrsa -out ca.key 4096

##
## 1-b) Generate the CA certificate
##
$  openssl req -x509 -new -nodes -sha512 -days 3650 \
    -subj "/C=CN/ST=Seoul/L=Seoul/O=AndrewInc/OU=Personal/CN=sejong.cluster" \
    -key ca.key \
    -out ca.crt



######################################################################
## 2)   Generate a Server Certificate
######################################################################

##
## 2-a) Generate a private key
##
$  openssl genrsa -out sejong.cluster.key 4096

##
## 2-b) Generate a certificate signing request (CSR).
##
$  openssl req -sha512 -new \
    -subj "/C=CN/ST=Seoul/L=Seoul/O=AndrewInc/OU=Personal/CN=sejong.cluster" \
    -key sejong.cluster.key \
    -out sejong.cluster.csr

##
## 2-c) Generate an x509 v3 extension file.
##
$  cat << EOF > v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=sejong.cluster
DNS.2=sejong
DNS.3=registry
DNS.4=registry.sejong.cluster
DNS.5=10.1.4.51
DNS.6=registry.andrewinc.co.kr
EOF

$

##
## 2-d) Use the v3.ext file to generate a certificate for your server host.
##
$  openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in sejong.cluster.csr \
    -out sejong.cluster.crt



######################################################################
## 3)   Merge the intermediate certificate with your own certificate 
##      to create a certificate bundle
######################################################################
## 참고로, 아래 명령은 Ubuntu에서만 가능한 명령이다. 
$  cp sejong.cluster.crt /usr/local/share/ca-certificates/sejong.cluster.crt
$  update-ca-certificates

## CentOS, Red Hat(RHEL)을 사용한다면, 위 명령 대신 아래 명령을 수행해야 한다.
$  cp sejong.cluster.crt /etc/pki/ca-trust/source/anchors/sejong.cluster.crt
$  update-ca-trust

 

 

 

Server Certificate  내용 확인

$  openssl x509 -in /usr/local/share/ca-certificates/sejong.cluster.crt -noout -text

Certificate:
    Data:
        Version: 3 (0x2)
        ... 중간 생략 ...
        Signature Algorithm: sha512WithRSAEncryption
        Issuer: C = KR, ST = Seoul, L = Seoul, O = MyCompany OU = Personal, CN = sejong.cluster
        Validity
            Not Before: Dec 21 04:08:37 2022 GMT
            Not After : Dec 18 04:08:37 2032 GMT
        Subject: C = KR, ST = Seoul, L = Seoul, O = MyCompany, OU = Personal, CN = sejong.cluster
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
                Modulus:
                    00:bd:07:06:cb:ee:e9:0b:5a:51:bb:cc:a3:5c:a0:
                    ... 중간 생략 ...
                    ad:18:05
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                ... 중간 생략 ...
            X509v3 Basic Constraints:
                ... 중간 생략 ...
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
            X509v3 Extended Key Usage:
                TLS Web Server Authentication
            X509v3 Subject Alternative Name:
                DNS:sejong.cluster, DNS:sejong, DNS:registry, DNS:registry.sejong.cluster, DNS:10.1.4.51
            X509v3 Subject Key Identifier:
                ... 중간 생략 ...
    Signature Algorithm: sha512WithRSAEncryption
    Signature Value:
        82:b9:5d:81:e7:90:85:20:08:8a:da:bb:a7:fc:30:fb:62:bf:
        ... 중간 생략 ...
        b4:64:b7:45:98:37:e8:f4
        
$

 


  

'Security' 카테고리의 다른 글

Zero Trust (개념, 관련 사업, 관련 표준 동향)  (0) 2024.05.27
반응형

Kubernetes service의 manifest를 작성하다보면, port와 targetport가 헷갈린다.

각 term이 의미하는 것을 지금 이해해도, 몇 개월 뒤에 다시 service resource에 대한 manifest를 작성하려고 보면 또 헷갈려서 다시 문서를 뒤적거리게 된다.

 

  • Port
    • Service Object 자체의 Port.  즉, 여러 Pod를 묶어서 이 Port 값으로 노출시킨다.
    • 한 kubernetes cluster 내에서 다른 pod가 내 pod에게 Layer 4 메시지를 전송할 때 바라보는 port number.
    • 만약 MetalLB, NGINX 같은 Ingress Gateway를 사용하는 경우라면, 이 'port' 값이 Cluster 외부에서 LB(즉, Ingress Gateway)를 통해 들어오는 Port number가 된다.
      예를 들어,   http://{EXTERNAL-IP}:{SERVICE-PORT}
      이런 형태가 된다.
  • TargetPort
    • 내 pod 안에 있는 container가 listening하고 있는 port number.
    • container(즉, app)이 어떤 port를 listening하고 있는지 정확한 값을 알고 설정해야 한다. (HTTPD 설정시 기본 값을 이용했다면, 대부분 80이지 않을까?)
  • NodePort
    • kubernetes 밖으로 노출시킬 port number.
    • Ingress Gateway 또는 Istio를 사용하는 경우에는 딱히 설정할 필요없는 설정 항목.

 

 

Example

만약 2개의 TCP Port를 Service로 오픈하고 싶다면, 아래와 같이 Service Resource와 Pod Resource를 설정한다.

 

##
## Service Manifest Example
##
kind: Service
metadata:
... 중간 생략 ...
spec:
  ports:
  - name: metrics
    port: 24231
    protocol: TCP
    targetPort: metrics
  - name: logfile-metrics
    port: 2112
    protocol: TCP
    targetPort: logfile-metrics
... 중간 생략 ...   
    


##
## Pod Manifest Example
##
kind: Pod
metadata:
... 중간 생략 ...
spec:
  containers:
    name: my-container  
    ports:
    - containerPort: 24231
      name: metrics
      protocol: TCP
    - containerPort: 2112
      name: logfile-metrics
      protocol: TCP
... 중간 생략 ...

'kubernetes' 카테고리의 다른 글

MetalLB BGP 모드를 이용한 Loadbalaning  (0) 2021.08.30
Istio Circuit Break  (0) 2021.08.07
Dockerfile Example  (0) 2021.07.19
Istio Web Docs - 읽기 좋은 순서대리 정리  (0) 2021.07.19
nsenter  (0) 2021.07.13
반응형

아래와 같은 형식으로 Dockerfile을 작성한다.

## syntax=docker/dockerfile:1


FROM ubuntu:18.04


## 이 Dockerfile 작성자
MAINTAINER sejong


## `apt install ...` 명령으로 패키지 설치시 사용자 입력을 요구하는 것을 방지
## 반드시 `apt install` 명령보다 앞에 DEBIAN_FRONTEND 환경 변수를 설정해야 한다.
ENV DEBIAN_FRONTEND=noninteractive


## 참고: 위 변수를 apt install 명령과 같이 방법도 있다. (아래 예시 참고)
##   `DEBIAN_FRONTEND=noninteractive apt install -y tzdata` 


RUN apt update

RUN apt install -y ca-certificates \
                   net-tools \
                   tzdata \
                   wget
                   
                   
## Timezone
ENV TZ Asia/Seoul


## Locale and Language
ENV LANG C.UTF-8
ENV LANGUAGE ko
ENV LC_ALL C.UTF-8


## 외부 Storage를 마운트하기 위한 정보
RUN mkdir  /mnt/my_volume
VOLUME     /mnt/my_volume


COPY  my-script.sh /usr/local/bin/my-script.sh
ENTRYPOINT ["my-script.sh"]


COPY . /app
RUN make /app
EXPOSE  8080
CMD python /app/app.py

 

Dockerfile을 작성한 후, docker image를 만들기 위해 아래와 같이 build 명령을 수행한다.

$ docker build -t myapp:v1 .

 

 

'kubernetes' 카테고리의 다른 글

Istio Circuit Break  (0) 2021.08.07
Port configurations for Kubernetes service  (0) 2021.07.20
Istio Web Docs - 읽기 좋은 순서대리 정리  (0) 2021.07.19
nsenter  (0) 2021.07.13
Kubernetes Port-Forward 설정  (2) 2021.07.10
반응형

Istio를 처음 접할 때, 어떤 순서로 Web docs를 읽어야 할지 몰라서, 우왕좌왕할 수 있다. 아래의 순서로 읽으면 Istio의 동작 원리를 이해하면서 연습도 같이 할 수 있어서 좋다.

 

Getting Started

 

Getting Started

Try Istio’s features quickly and easily.

istio.io

 

위 문서를 읽은 직후, 아래의 문서를 읽으면서 실습하는 것이 좋다.

Next steps

 

Getting Started

Try Istio’s features quickly and easily.

istio.io

 

 

Best Practices

 

Best Practices

Best practices for setting up and managing an Istio service mesh.

istio.io

 

'kubernetes' 카테고리의 다른 글

Port configurations for Kubernetes service  (0) 2021.07.20
Dockerfile Example  (0) 2021.07.19
nsenter  (0) 2021.07.13
Kubernetes Port-Forward 설정  (2) 2021.07.10
Kubernetes Ingress Gateway - Concept & Practice  (0) 2021.07.10
반응형

man 명령으로 man page를 읽으면, 위/아래 페이지 이동이나 검색하는 것이 불편하다.

차라리 text 파일을 열어서 검색하는 것이 앞/뒤 문맥을 확인하기 편하고, 전체 페이지 중에서 내가 어디쯤을 읽고 있는지 감을 잡기도 편하다.

그래서 이런 불편함을 해결하려고 man page를 text file로 dump하는 것을 만들었다.

 

##
## Filename:  .bash_profile  또는  .bashrc
##

mandump() {
    man $1 | col -bx > man_page_$1.txt
}

 

위와 같이 .bashrc 파일에 명령 'mandump'를 추가하고,  아래와 같이 실행한다.

$ mandump curl

$ vi man_page_curl.txt

curl(1)                           Curl Manual                          curl(1)
NAME
       curl - transfer a URL

SYNOPSIS
       curl [options / URLs]
       
DESCRIPTION
       curl  is  a tool to transfer data from or to a server, using one of the
       supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS,  IMAP,
       IMAPS,  LDAP,  LDAPS,  POP3,  POP3S,  RTMP, RTSP, SCP, SFTP, SMB, SMBS,
       SMTP, SMTPS, TELNET and TFTP). The command is designed to work  without
       user interaction.
 ...
 ...

 

 

 

 

+ Recent posts