ืืขืจื. ืชืจืืื: ืืืืจ ืื, ืฉื ืืชื ืขื ืืื Galo Navarro, ืืืืื ืืชืคืงืื ืืื ืืก ืชืืื ื ืจืืฉื ืืืืจืช Adevinta ืืืืจืืคืืช, ืืื "ืืงืืจื" ืืจืชืงืช ืืืืืืช ืืชืืื ืชืคืขืื ืืชืฉืชืืืช. ืืืืชืจืช ืืืงืืจืืช ืฉืื ืืืจืืื ืืขื ืืชืจืืื ืืกืืื ืฉืืกืืคืจ ืืกืืืจ ืืืจ ืืืชืืื.
ืืขืจื ืืืืืืจ: ื ืจืื ืืื ืืคืืกื ืืื
ืืคื ื ืฉืืืขืืื, ืืฆืืืช ืฉืื ืืขืืืจ ืืืงืจื-ืฉืืจืืช ืืืื ืืคืืืคืืจืืช ืืืื ืฉืืืื CI/CD, ืืื ืจืืฆื ืืืืกืก Kubernetes, ืืืืื ืืขืื ืืืจืื ืืืืื. ืืืืื ืืื ืืขื ืืืคื ื ืกืืื ื: ืชืื ื ื ืืงืืช ืืืชื ืืืกืืก ืืืืขืืืจ ื-150 ืฉืืจืืชืื ื ืืกืคืื ืืืืืฉืื ืืงืจืืืื. ืืืื ืืืจืืื ืืชืคืขืื ืฉื ืืื ืืืคืืืคืืจืืืช ืืืงืืื ืืช ืืืืืืืช ืืกืคืจื (Infojobs, Fotocasa ืืื').
ืืืืจ ืฉืคืจืกื ื ืืช ืืืคืืืงืฆืื ื-Kubernetes ืืืคื ืื ื ืืืื ืงืฆืช ืชื ืืขื, ืืืืชื ืื ื ืืคืชืขื ืืืืืื. ืึฐืขึทืึผึตื (ืึถืึดืืึนื) ืืืงืฉืืช ื-Kubernetes ืืื ืืืืืืช ืคื 10 ืืืฉืจ ื-EC2. ืืืืคื ืืืื, ืืื ืฆืืจื ืืืฆืื ืคืชืจืื ืืืขืื ืื, ืื ืื ืืืฉ ืืช ืืืืืจื ืฉื ืืืืงืจื-ืฉืืจืืช (ืืืืื, ืืช ืื ืืคืจืืืงื).
ืืืืข ืืื ืืืฉืืื ืืืื ืืืจืื ื-Kubernetes ืืืฉืจ ื-EC2?
ืืื ืืืฆืื ืืช ืฆืืืืจ ืืืงืืืง, ืืกืคื ื ืืืืื ืืืืจื ืื ื ืชืื ืืืงืฉื. ืืืจืืืืงืืืจื ืฉืื ื ืคืฉืืื: ืฉืขืจ API (Zuul) ืืขืืืจ ืืงืฉืืช ืืืืคืขื ืืืงืจื-ืฉืืจืืช ื-EC2 ืื Kubernetes. ื-Kubernetes ืื ื ืืฉืชืืฉืื ืืืงืจ NGINX Ingress, ืืืงื ืืื ืืืืืจืืื ืื ืืืืืืงืืื ืจืืืืื ืืื
EC2
+---------------+
| +---------+ |
| | | |
+-------> BACKEND | |
| | | | |
| | +---------+ |
| +---------------+
+------+ |
Public | | |
-------> ZUUL +--+
traffic | | | Kubernetes
+------+ | +-----------------------------+
| | +-------+ +---------+ |
| | | | xx | | |
+-------> NGINX +------> BACKEND | |
| | | xx | | |
| +-------+ +---------+ |
+-----------------------------+
ื ืจืื ืฉืืืขืื ืงืฉืืจื ืืืฉืืื ืืจืืฉืื ืืช ื-backend (ืกืืื ืชื ืืช ืืืืจ ืืืขืื ืืืจืฃ ืืชืืจ "xx"). ื-EC2, ืชืืืืช ืืืคืืืงืฆืื ืืจืื ื-20 ืืืคืืืช ืืฉื ืืื. ื-Kubernetes, ืืืฉืืื ืืืื ื-100-200 ืืืคืืืช ืืฉื ืืื.
ืคืืจื ื ืืืืืจืืช ืืช ืืืฉืืืื ืืกืืืจืื ืืงืฉืืจืื ืืฉืื ืื ืืืื ืืจืืฆื. ืืจืกืช JVM ื ืฉืืจืช ืืื. ืื ืืขืืืช ืงืื ืืืื ืจืืืฆืื ืื ืืื ืงืฉืืจืืช ืืื: ืืืคืืืงืฆืื ืืืจ ืจืฆื ืืืฆืืื ืืงืื ืืืื ืจืื ื-EC2. ืืืขื? ืืื ืฆืคืื ื ืืืฉืืืืช ืืืืืืช ืืคืืื ืืืงืฉื ืืืช ืืฉื ืืื. ืืคืฉืจ ืื ืืืื ืื ืืคืกืงืืช ืืืืกืืฃ ืืฉืคื.
ืืื ืืื ืืื Kubernetes ืฉืื ื ืชืื ืื ืืืคืืืงืฆืื ืืฉ ืชืืืช ืืืฆืื ืืช ืืืืืื ืฉืฉืืืืชืืช DNS ืืจืื ืืืขืืืช ืืืืืช ืืขืืจ.
ืืฉืขืจื 1: ืคืชืจืื ืฉื DNS
ืขืืืจ ืื ืืงืฉื, ืืืคืืืงืฆืื ืฉืื ื ื ืืืฉืช ืืืืคืข ืฉื AWS Elasticsearch ืคืขื ืขื ืฉืืืฉ ืคืขืืื ืืืืืืื ืืื elastic.spain.adevinta.com
. ืืชืื ืืืืืืืช ืฉืื ื
ืฉืืืืชืืช DNS ืืืืื:
[root@be-851c76f696-alf8z /]# while true; do dig "elastic.spain.adevinta.com" | grep time; sleep 2; done
;; Query time: 22 msec
;; Query time: 22 msec
;; Query time: 29 msec
;; Query time: 21 msec
;; Query time: 28 msec
;; Query time: 43 msec
;; Query time: 39 msec
ืืงืฉืืช ืืืืืช ืืืื ืืืงืจื EC2 ืฉืืื ืืืคืืืงืฆืื ืคืืขืืช:
bash-4.4# while true; do dig "elastic.spain.adevinta.com" | grep time; sleep 2; done
;; Query time: 77 msec
;; Query time: 0 msec
;; Query time: 0 msec
;; Query time: 0 msec
;; Query time: 0 msec
ืืืชืืฉื ืืื ืฉืืืืคืืฉ ืืจื ื-30 ืืืคืืืช ืืฉื ืืื, ืืชืืจืจ ืฉืจืืืืืฆืืืช DNS ืืขืช ืืืืฉื ืื Elasticsearch ืืื ืชืจืื ืืขืืืื ืืืฉืืื.
ืขื ืืืช, ืื ืืื ืืืืจ ืืฉืชื ืกืืืืช:
- ืืฉ ืื ื ืืืจ ืืืื ืืืฉืืื Kubernetes ืฉืืงืืืืื ืืื ืืจืืงืฆืื ืขื ืืฉืืื AWS ืืืื ืืกืืื ืืืฉืืืื ืืืืื. ืชืืื ืืกืืื ืืฉืจ ืชืืื, ืืื ืืชืืืืกืช ืกืคืฆืืคืืช ืืืงืจื ืื.
- ืื ื ืืืืขืื ืฉื-JVM ืืืฆืข ืืืกืื DNS ืืืืืจืื. ืืชืืื ืืช ืฉืื ื, ืขืจื ื-TTL ื ืืชื
$JAVA_HOME/jre/lib/security/java.security
ืืืืืจ ื-10 ืฉื ืืืช:networkaddress.cache.ttl = 10
. ืืืืืื ืืืจืืช, ื-JVM ืฆืจืื ืืฉืืืจ ืืช ืื ืฉืืืืชืืช ื-DNS ืืืฉื 10 ืฉื ืืืช.
ืืื ืืืฉืจ ืืช ืืืฉืขืจื ืืจืืฉืื ื, ืืืืื ื ืืืคืกืืง ืืืชืงืฉืจ ื-DNS ืืืื ืื ืืืจืืืช ืื ืืืขืื ื ืขืืื. ืจืืฉืืช, ืืืืื ื ืืืืืืจ ืืืืฉ ืืช ืืืคืืืงืฆืื ืื ืฉืชืชืงืฉืจ ืืฉืืจืืช ืขื Elasticsearch ืืคื ืืชืืืช IP, ืืื ืืจื ืฉื ืืืืืื. ืื ืืืจืืฉ ืฉืื ืืื ืงืื ืืคืจืืกื ืืืฉื, ืื ืคืฉืื ืืืคืื ื ืืช ืืืืืืื ืืืชืืืช ื-IP ืฉืื ื /etc/hosts
:
34.55.5.111 elastic.spain.adevinta.com
ืืขืช ืืงืื ืืืื ืจ ืงืืื IP ืืืขื ืืื. ืื ืืืื ืืฉืืคืืจ ืืกืืื, ืืื ืืืื ื ืจืง ืืขื ืืืชืจ ืงืจืืืื ืืจืืืช ืืืืืืจ ืืฆืคืืืืช. ืืืจืืช ืฉืคืชืจืื DNS ืืจื ืืื ืจื, ืืกืืื ืืืืืชืืช ืขืืืื ืืืงื ืืืืชื ื.
ืืืืื ืืืืฆืขืืช ืจืฉืช
ืืืืื ื ืื ืชื ืชื ืืขื ืืืืืืื ืืืืฆืขืืช tcpdump
ืืื ืืจืืืช ืื ืืืืืง ืงืืจื ืืจืฉืช:
[root@be-851c76f696-alf8z /]# tcpdump -leni any -w capture.pcap
ืืืืจ ืืื ืฉืืื ื ืืกืคืจ ืืงืฉืืช ืืืืจืื ื ืืช ืืืืืื ืฉืืื (kubectl cp my-service:/capture.pcap capture.pcap
) ืื ืืชืื ื ืืกืฃ ื
ืื ืืื ืฉืื ืืืจ ืืฉืื ืืฉืืืืชืืช ื-DNS (ืืืฅ ืืืืจ ืืื ืงืื ืฉืขืืื ืืืืจ ืืืืืจ ืืืชืจ). ืืื ืืื ืืืืจืืืืช ืืกืืืืืช ืืืืคื ืฉืื ืืฉืืจืืช ืฉืื ื ืืืคื ืืื ืืงืฉื. ืืืื ืฆืืืื ืืกื ืฉื ืืืืืื ืืืจืื ืฉืืืงืฉื ืืชืงืืืช ืืคื ื ืชืืืืช ืืชืืืื:
ืืกืคืจื ืืืืืืืช ืืืฆืืื ืืขืืืื ืืจืืฉืื ื. ืืฉื ืืืืืจืืช, ืงืืืืชื ืืช ืืจืืืืช ื-TCP ืืฉืื ืืช.
ืืืจื ืืืจืืง ืฉืืชืืื ืืืืืื 328 ืืจืื ืืืฆื ืืืงืื (172.17.22.150) ืืฆืจ ืืืืืจ TCP ืืืืื (172.17.36.147). ืืืืจ ืืืืฆืช ืืื ืืจืืฉืื ืืช (328-330), ืืืืื 331 ืืืืื HTTP GET /v1/..
- ืืงืฉื ื ืื ืกืช ืืฉืืจืืช ืฉืื ื. ืื ืืชืืืื ืืจื 1 ืืืคืืช ืืฉื ืืื.
ืืืจื ืืืคืืจ (ืืชืื ืืืืื 339) ืืจืื ืฉืืฉืืจืืช ืฉืื ื ืฉืื ืืงืฉืช HTTP ืืืืคืข Elasticsearch (ืืื ืืืืฆืช ืื ืฉื TCP ืื ืืื ืืฉืชืืฉ ืืืืืืจ ืงืืื). ืื ืืงื 18 ืืืคืืืช ืืฉื ืืื.
ืขื ืื ืืื ืืกืืจ, ืืืืื ืื ืืชืืืืื ืืขืจื ืืขืืืืืื ืืฆืคืืืื (20-30 ืืืคืืืช ืืฉื ืืื ืืืืืื ืืืืงืื).
ืขื ืืืช, ืืงืืข ืืืืื ืืืงื 86 ืืืคืืืช ืืฉื ืืื. ืื ืงืืจื ืื? ืขื ืืืืื 333, ืืฉืืจืืช ืฉืื ื ืฉืื ืืงืฉืช HTTP GET ืื /latest/meta-data/iam/security-credentials
, ืืืื ืืืจืื, ืขื ืืืชื ืืืืืจ TCP, ืืงืฉืช GET ื ืืกืคืช ืื /latest/meta-data/iam/security-credentials/arn:..
.
ืืฆืื ื ืฉืื ืืืจ ืขื ืขืฆืื ืืื ืืงืฉื ืืืืจื ืื ืืืขืงื. ืจืืืืืฆืืืช ื-DNS ืืื ืงืฆืช ืืืชืจ ืืืืืช ืืงืื ืืืื ืจืื ืฉืื ื (ืืืกืืจ ืืชืืคืขื ืื ืืขื ืืื, ืืื ืืฉืืืจ ืืืชื ืืืืืจ ื ืคืจื). ืืชืืจืจ ืฉืืืืจื ืืขืืืืืื ืืืจืืืื ืืื ืฉืืืืช ืืฉืืจืืช AWS Instance Metadata ืืื ืืงืฉื.
ืืฉืขืจื 2: ืงืจืืืืช ืืืืชืจืืช ื-AWS
ืฉืชื ื ืงืืืืช ืืงืฆื ืฉืืืืืช ื
/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
arn:aws:iam::<account_id>:role/some_role
ืืืงืฉื ืืฉื ืืื ืืืงืฉืช ืื ืงืืืช ืืงืฆื ืืฉื ืืื ืืจืฉืืืช ืืื ืืืช ืขืืืจ ืืืคืข ืื:
/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/arn:aws:iam::<account_id>:role/some_role`
{
"Code" : "Success",
"LastUpdated" : "2012-04-26T16:39:16Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
"SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"Token" : "token",
"Expiration" : "2017-05-17T15:09:54Z"
}
ืืืงืื ืืืื ืืืฉืชืืฉ ืืื ืืคืจืง ืืื ืงืฆืจ ืืขืืื ืืงืื ืืขืช ืืขืช ืชืขืืืืช ืืืฉืืช (ืืคื ื ืื Expiration
). ืืืืื ืคืฉืื: AWS ืืกืืื ืืคืชืืืช ืืื ืืื ืืขืชืื ืงืจืืืืช ืืืขืื ืืืืื, ืื ืืงืืืืช ืืืืืื ืืฉืืืจ ืืืชื ืืืืืื ืืืฉื ืืกืคืจ ืืงืืช ืืื ืืคืฆืืช ืขื ืขืื ืฉ ืืืืฆืืขืื ืืงืฉืืจ ืืืฉืืช ืืืฉืืจืื ืืืฉืื.
AWS Java SDK ืืืืจ ืืงืืช ืขื ืขืฆืื ืืช ืืืืจืืืช ืืืจืืื ืืชืืืื ืืื, ืืื ืืกืืื ืืืฉืื ืื ืื ืงืืจื.
ืืืืจ ืืืคืืฉ ืืขืืืช ื-GitHub, ื ืชืงืื ื ืืืขืื
AWS SDK ืืขืืื ืืืฉืืจืื ืืืฉืจ ืืชืจืืฉ ืืื ืืืชื ืืื ืืืืื:
- ืชืืจืื ืชืคืืื (
Expiration
) ืืืคืื ืืชืืEXPIRATION_THRESHOLD
, ืืงืืื ืขื 15 ืืงืืช. - ืืืชืจ ืืื ืขืืจ ืืื ืื ืืกืืื ืืืืจืื ืืืืฉ ืชืขืืืืช ืืืฉืจ
REFRESH_THRESHOLD
, ืืงืืื ืงืฉื ืืืฉื 60 ืืงืืช.
ืืื ืืจืืืช ืืช ืชืืจืื ืืชืคืืื ืืคืืขื ืฉื ืืืืฉืืจืื ืฉืื ื ืืงืืืื, ืืจืฆื ื ืืช ืคืงืืืืช ื-cURL ืฉืืขืื ืื ืืืืืืื ืืื ืืืืืคืข ืฉื EC2. ืชืงืืคืช ืืชืืงืฃ ืฉื ืืชืขืืื ืฉืืชืงืืื ืืืืืืื ืืชืืจืจื ืืงืฆืจื ืืืจืื: 15 ืืงืืช ืืืืืง.
ืืขืช ืืื ืืชืืจืจ: ืืืงืฉื ืืจืืฉืื ื ืืฉืืจืืช ืฉืื ื ืงืืื ืชืขืืืืช ืืื ืืืช. ืืืืืื ืฉืื ืื ืืื ืชืงืคืื ืืืืชืจ ื-15 ืืงืืช, ื-AWS SDK ืืืืื ืืขืืื ืืืชื ืืืงืฉื ืฉืืืืจ ืืื. ืืื ืงืจื ืขื ืื ืืงืฉื.
ืืืืข ืชืงืืคืช ืืชืืงืฃ ืฉื ืืชืขืืืืช ืืชืงืฆืจื?
Metadata ืฉื ืืืคืข AWS ืชืืื ื ืืขืืื ืขื ืืืคืขื EC2, ืื ืขื Kubernetes. ืืฆื ืฉื ื, ืื ืจืฆืื ื ืืฉื ืืช ืืช ืืืฉืง ืืืคืืืงืฆืื. ืืฉืืื ืื ืืฉืชืืฉื ื
KIAM ืืกืคืงืช ืชืขืืืืช ืืืืื ืงืฆืจ ืืชืจืืืืื. ืื ืืืืื ื ืืืชืืฉื ืืื ืฉืืืจื ืืืืื ืืืืืฆืข ืฉื ืชืจืืื ืงืฆืจ ืืืชืจ ืืื ืฉื ืืืคืข EC2. ืชืงืืคืช ืชืืงืฃ ืืจืืจืช ืืืื ืืืืฉืืจืื
ืืชืืฆืื ืืื, ืื ืืชื ืืืกื ืืช ืฉื ื ืขืจืื ืืจืืจืช ืืืืื ืื ืขื ืืื ืื, ืืชืขืืจืจืช ืืขืื. ืื ืืืฉืืจ ืฉื ืืชื ืืืงืฉื ืืคืื ืืืืจ 15 ืืงืืช. ืขื ืืืช, AWS Java SDK ืืืืฅ ืืืืืฉ ืฉื ืื ืืืฉืืจ ืฉื ืืชืจื ืื ืคืืืช ื-15 ืืงืืช ืืคื ื ืชืืจืื ืืชืคืืื ืฉืื.
ืืชืืฆืื ืืื, ืืืืฉืืจ ืืืื ื ื ืืืฅ ืืืชืืืฉ ืขื ืื ืืงืฉื, ืืืจ ืืืจืื ืืืื ืฉืืืืช ื-API ืฉื AWS ืืืืจื ืืขืืืื ืืฉืืขืืชืืช ืืืฉืืื. ื-AWS Java SDK ืืฆืื ื
ืืคืชืจืื ืืชืืจืจ ืืคืฉืื. ืคืฉืื ืืืืจื ื ืืืืฉ ืืช KIAM ืืืงืฉ ืืืฉืืจืื ืขื ืชืงืืคืช ืชืืงืฃ ืืจืืื ืืืชืจ. ืืจืืข ืฉืื ืงืจื, ืืืื ืืืจืื ืืงืฉืืช ืืื ืืฉืชืชืคืืช ืฉื ืฉืืจืืช Metadata ืฉื AWS, ืืืฉืืืื ืืจืื ืืจืืืช ื ืืืืืช ืขืื ืืืชืจ ืืืฉืจ ื-EC2.
ืืืฆืืื
ืืืชืืกืก ืขื ืื ืืกืืื ืฉืื ื ืขื ืืขืืจืืช, ืืื ืืืงืืจืืช ืื ืคืืฆืื ืืืืชืจ ืืืขืืืช ืืื ืื ืืืืื ื-Kubernetes ืื ืืืืื ืืื ืืืจืื ืฉื ืืคืืืคืืจืื. ืื ืื ืื ืืืคื ืืคืืืื ืืืืชืืื ืืฉืืจืืชื ืืืืงืจื ืฉืื ื ืืขืืืจืื. ืืขืืืช ืืชืขืืจืจืืช ืืขืชืื ืงืจืืืืช ืคืฉืื ืื ืื ืื ื ืืืืจืื ืืืื ืืื ืฉืื ืื ืืื.
ืื ื ืืขืจืืืื ืืื ืืขืจืืืช ืืืจืืืืช ืฉืืขืืื ืื ืงืืืื ืืื ืืจืืงืฆืื ืื ืขื ืื ืืขืืจ, ืืฆืืคืืื ืฉืืื ืื ืืืื ืืขืจืืช ืืืช ืืืืืื ืืืชืจ. ืืืจืื ืืฆืขืจ, ืืื ืฉืืืชืจ ืืืื ืืื, ืืืชืจ ืืงืื ืืืขืืืืช, ืืื ืืจืืคืื ืืืืื ืืืชืจ.
ืืืงืจื ืฉืื ื, ืืืืืืจ ืืืืื ืื ืืื ืชืืฆืื ืฉื ืืืืื ืื ืืืืืืช ืฉืืืืืช ื-Kubernetes, KIAM, AWS Java SDK ืื ืืืืงืจื-ืฉืืจืืช ืฉืื ื. ืื ืืื ืชืืฆืื ืฉื ืฉืืืื ืฉื ืฉืชื ืืืืจืืช ืืจืืจืช ืืืื ืขืฆืืืืืช: ืืืช ื-KIAM, ืืฉื ืืื ื-AWS Java SDK. ืืืชืืฉื ืื ืคืจื, ืฉื ื ืืคืจืืืจืื ืืืืื ืืื: ืืืื ืืืช ืืืืืฉ ืืืืฉืืจืื ืืคืขืืื ื-AWS Java SDK, ืืชืงืืคืช ืืชืืงืฃ ืืงืฆืจื ืฉื ืืืืฉืืจืื ื-KAIM. ืืื ืืืฉืจ ืืชื ืืืืจ ืืืชื ืืื, ืืชืืฆืืืช ืืืคืืืช ืืืชื ืฆืคืืืืช. ืฉื ื ืคืชืจืื ืืช ืขืฆืืืืื ืืืืืื ืืื ืืื ื ืืืืืื ืืืืืช ืืืืื ืืื ืืฉืืืืื.
ื .ื ืืืืชืจืื
ืชืืื ืืืืื ืขืื ืขื ืืืจืืืืงืืืจื ืฉื ืืื ืืฉืืจืืช KIAM ืืฉืืืื AWS IAM ืขื Kubernetes ืืืชืืืช
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ
3 ืกืืคืืจืื ืขื ืืืฉืืื ืืช ืฉื Kubernetes ืืืืฆืืจ: ืื ืื ืืืงื, ืืืืื ืืื ื ื, webhook "; - ยซ
ืืืฆื ืกืืจื ืขืืืคืืืืช ืฉื ืชืจืืืืื ื-Kubernetes ืืจืื ืืืฉืืชื ืืืขืืืืช Grafana "; - ยซ
6 ืืืื ืืขืจืืช ืืฉืขืฉืขืื ืืชืคืขืื ืฉื Kubernetes [ืืืคืชืจืื ืฉืืื] "; - ยซ
6 ืกืืคืืจืื ืืขืฉืืื ืืืื ืืืืืืื ืฉืื ื ื-SRE ".
ืืงืืจ: www.habr.com