{"id":34948,"date":"2024-09-05T14:19:07","date_gmt":"2024-09-05T07:19:07","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/05\/bat-dau-voi-viec-can-bang-tai-tren-cum-lke\/"},"modified":"2026-05-14T10:32:29","modified_gmt":"2026-05-14T09:32:29","slug":"bat-dau-voi-viec-can-bang-tai-tren-cum-lke","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/05\/bat-dau-voi-viec-can-bang-tai-tren-cum-lke\/","title":{"rendered":"B\u1eaft \u0111\u1ea7u v\u1edbi Load Balancing tr\u00ean LKE Cluster"},"content":{"rendered":"<p>Linode Kubernetes Engine (LKE) l\u00e0 d\u1ecbch v\u1ee5 Kubernetes \u0111\u01b0\u1ee3c Linode qu\u1ea3n l\u00fd. Khi tri\u1ec3n khai c\u1ee5m LKE, b\u1ea1n s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c Kubernetes Master ch\u1ea1y c\u00e1c th\u00e0nh ph\u1ea7n m\u1eb7t ph\u1eb3ng \u0111i\u1ec1u khi\u1ec3n c\u1ee7a c\u1ee5m m\u00e0 kh\u00f4ng m\u1ea5t th\u00eam ph\u00ed. M\u1eb7t ph\u1eb3ng \u0111i\u1ec1u khi\u1ec3n bao g\u1ed3m Tr\u00ecnh qu\u1ea3n l\u00fd b\u1ed9 \u0111i\u1ec1u khi\u1ec3n \u0111\u00e1m m\u00e2y (CCM) c\u1ee7a Linode. cung c\u1ea5p c\u00e1ch \u0111\u1ec3 c\u1ee5m c\u1ee7a b\u1ea1n truy c\u1eadp c\u00e1c d\u1ecbch v\u1ee5 Linode b\u1ed5 sung. CCM c\u1ee7a Linode cung c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o d\u1ecbch v\u1ee5 c\u00e2n b\u1eb1ng t\u1ea3i c\u1ee7a Linode, Linode NodeBalancers.<\/p>\n<p>NodeBalancer cung c\u1ea5p cho c\u1ee5m Kubernetes c\u1ee7a b\u1ea1n m\u1ed9t c\u00e1ch \u0111\u00e1ng tin c\u1eady \u0111\u1ec3 hi\u1ec3n th\u1ecb t\u00e0i nguy\u00ean tr\u00ean Internet c\u00f4ng c\u1ed9ng. M\u1eb7t ph\u1eb3ng \u0111i\u1ec1u khi\u1ec3n LKE x\u1eed l\u00fd vi\u1ec7c t\u1ea1o v\u00e0 x\u00f3a NodeBalancer, \u0111\u1ed3ng th\u1eddi x\u00e1c \u0111\u1ecbnh ch\u00ednh x\u00e1c c\u00e1c t\u00e0i nguy\u00ean v\u00e0 m\u1ea1ng c\u1ee7a ch\u00fang m\u00e0 NodeBalancer s\u1ebd \u0111\u1ecbnh tuy\u1ebfn l\u01b0u l\u01b0\u1ee3ng truy c\u1eadp \u0111\u1ebfn. D\u1ecbch v\u1ee5 Kubernetes thu\u1ed9c lo\u1ea1i LoadBalancer \u0111\u01b0\u1ee3c t\u1ea1o, c\u1ee5m Kubernetes c\u1ee7a b\u1ea1n s\u1ebd t\u1ea1o d\u1ecbch v\u1ee5 Linode NodeBalancer v\u1edbi s\u1ef1 tr\u1ee3 gi\u00fap c\u1ee7a Linode CCM.<\/p>\n<h2 id=\"h-h\u01b0\u1edbng-d\u1eabn\">H\u01b0\u1edbng d\u1eabn<\/h2>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd cho b\u1ea1n th\u1ea5y:<\/p>\n<ul>\n<li>c\u1ea7n c\u00f3 c\u1ea5u h\u00ecnh t\u1ec7p k\u00ea khai \u0111\u1ec3 th\u00eam NodeBalancers v\u00e0o c\u1ee5m LKE c\u1ee7a b\u1ea1n.<\/li>\n<\/ul>\n<ul>\n<li>c\u00e1c ch\u00fa th\u00edch c\u00f3 s\u1eb5n \u0111\u1ec3 \u0111\u1ecbnh c\u1ea5u h\u00ecnh th\u00eam h\u00e0nh vi Linode NodeBalancers c\u1ee7a b\u1ea1n v\u00e0 c\u00e1ch k\u1ebft h\u1ee3p ch\u00fang v\u00e0o t\u1ec7p k\u00ea khai.<\/li>\n<\/ul>\n<ul>\n<li>c\u00e1c \u0111i\u1ec1u ki\u1ec7n ti\u00ean quy\u1ebft v\u00e0 ch\u00fa th\u00edch c\u1ea7n thi\u1ebft \u0111\u1ec3 \u0111\u1ecbnh c\u1ea5u h\u00ecnh vi\u1ec7c ch\u1ea5m d\u1ee9t TLS tr\u00ean NodeBalancers c\u1ee7a c\u1ee5m c\u1ee7a b\u1ea1n.<\/li>\n<\/ul>\n<ul>\n<li>c\u00e1ch \u0111\u1ecbnh c\u1ea5u h\u00ecnh m\u1ed1i quan h\u1ec7 phi\u00ean cho c\u00e1c Pod trong m\u1ed9t c\u1ee5m.<\/li>\n<\/ul>\n<p><strong>Tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u:<\/strong><\/p>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y gi\u1ea3 \u0111\u1ecbnh r\u1eb1ng b\u1ea1n c\u00f3 c\u1ee5m Kubernetes \u0111ang ho\u1ea1t \u0111\u1ed9ng \u0111\u01b0\u1ee3c tri\u1ec3n khai b\u1eb1ng Linode Kubernetes Engine (LKE). B\u1ea1n c\u00f3 th\u1ec3 tri\u1ec3n khai c\u1ee5m Kubernetes b\u1eb1ng LKE theo c\u00e1c c\u00e1ch sau:<\/p>\n<p>Tr\u00ecnh qu\u1ea3n l\u00fd \u0111\u00e1m m\u00e2y.<\/p>\n<p>API c\u1ee7a Linode v4.<\/p>\n<p>Terraform, c\u00f4ng c\u1ee5 c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng ph\u1ed5 bi\u1ebfn d\u01b0\u1edbi d\u1ea1ng m\u00e3 (IaC).<\/p>\n<p class=\"has-background\" style=\"background-color:#baf6e1\">M\u1ed9t c\u1ee5m LKE s\u1ebd \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t Tr\u00ecnh qu\u1ea3n l\u00fd b\u1ed9 \u0111i\u1ec1u khi\u1ec3n \u0111\u00e1m m\u00e2y c\u1ee7a Linode trong m\u1eb7t ph\u1eb3ng \u0111i\u1ec1u khi\u1ec3n c\u1ee7a c\u1ee5m. N\u1ebfu b\u1ea1n kh\u00f4ng tri\u1ec3n khai c\u1ee5m Kubernetes c\u1ee7a m\u00ecnh b\u1eb1ng LKE v\u00e0 mu\u1ed1n s\u1eed d\u1ee5ng Tr\u00ecnh qu\u1ea3n l\u00fd b\u1ed9 \u0111i\u1ec1u khi\u1ec3n \u0111\u00e1m m\u00e2y Linode, h\u00e3y xem C\u00e0i \u0111\u1eb7t Linode CCM tr\u00ean C\u1ee5m Kubernetes kh\u00f4ng \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd. &#8211; H\u01b0\u1edbng d\u1eabn.<\/p>\n<p><strong>Th\u00eam NodeBalancers v\u00e0o c\u1ee5m Kubernetes c\u1ee7a b\u1ea1n<\/strong><\/p>\n<p>\u0110\u1ec3 th\u00eam b\u1ed9 c\u00e2n b\u1eb1ng t\u1ea3i b\u00ean ngo\u00e0i v\u00e0o c\u1ee5m Kubernetes, b\u1ea1n c\u00f3 th\u1ec3 th\u00eam c\u00e1c d\u00f2ng v\u00ed d\u1ee5 v\u00e0o t\u1ec7p c\u1ea5u h\u00ecnh m\u1edbi ho\u1eb7c ph\u1ed5 bi\u1ebfn h\u01a1n l\u00e0 v\u00e0o t\u1ec7p D\u1ecbch v\u1ee5. Khi c\u1ea5u h\u00ecnh \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng cho c\u1ee5m c\u1ee7a b\u1ea1n, Linode NodeBalancers s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o v\u00e0 th\u00eam v\u00e0o c\u1ee7a b\u1ea1n. C\u1ee5m Kubernetes s\u1ebd c\u00f3 th\u1ec3 truy c\u1eadp \u0111\u01b0\u1ee3c th\u00f4ng qua \u0111\u1ecba ch\u1ec9 IP c\u00f4ng c\u1ed9ng v\u00e0 NodeBalancers s\u1ebd \u0111\u1ecbnh tuy\u1ebfn l\u01b0u l\u01b0\u1ee3ng truy c\u1eadp b\u00ean ngo\u00e0i \u0111\u1ebfn D\u1ecbch v\u1ee5 ch\u1ea1y tr\u00ean c\u00e1c n\u00fat ho\u1ea1t \u0111\u1ed9ng t\u1ed1t trong c\u1ee5m c\u1ee7a b\u1ea1n.<\/p>\n<div class=\"is-layout-constrained wp-block-group has-background\" style=\"background-color:#a9f3d9\">\n<div class=\"wp-block-group__inner-container\">\n<p>Vi\u1ec7c thanh to\u00e1n cho Linode NodeBalancers b\u1eaft \u0111\u1ea7u ngay sau khi c\u1ea5u h\u00ecnh m\u1eabu \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng th\u00e0nh c\u00f4ng cho c\u1ee5m Kubernetes c\u1ee7a b\u1ea1n.<\/p>\n<p>Trong b\u1ea5t k\u1ef3 c\u1ea5u h\u00ecnh NodeBalancer n\u00e0o, ng\u01b0\u1eddi d\u00f9ng n\u00ean nh\u1edb r\u1eb1ng NodeBalancer c\u00f3 gi\u1edbi h\u1ea1n k\u1ebft n\u1ed1i t\u1ed1i \u0111a l\u00e0 10.000 k\u1ebft n\u1ed1i \u0111\u1ed3ng th\u1eddi.<\/p>\n<\/div>\n<\/div>\n<pre class=\"wp-block-code\"><code>spec:<br> type: LoadBalancer <br>ports:<br> - name:<br> http port: 80 <br> protocol: TCP <br> targetPort: 80<\/code><\/pre>\n<ul>\n<li>Spec.type c\u1ee7a LoadBalancer ch\u1ecbu tr\u00e1ch nhi\u1ec7m y\u00eau c\u1ea7u Kubernetes t\u1ea1o Linode NodeBalancer.<\/li>\n<\/ul>\n<ul>\n<li>C\u00e1c d\u00f2ng c\u00f2n l\u1ea1i cung c\u1ea5p \u0111\u1ecbnh ngh\u0129a c\u1ed5ng cho Pod c\u1ee7a D\u1ecbch v\u1ee5 c\u1ee7a b\u1ea1n v\u00e0 \u00e1nh x\u1ea1 c\u1ed5ng \u0111\u1ebfn t\u1edbi C\u1ed5ng \u0111\u00edch c\u1ee7a v\u00f9ng ch\u1ee9a.<\/li>\n<\/ul>\n<p><strong>Xem chi ti\u1ebft NodeBalancers<\/strong><\/p>\n<p>\u0110\u1ec3 xem chi ti\u1ebft v\u1ec1 vi\u1ec7c ch\u1ea1y NodeBalancers tr\u00ean c\u1ee5m c\u1ee7a b\u1ea1n:<\/p>\n<p>Nh\u1eadn c\u00e1c d\u1ecbch v\u1ee5 \u0111ang ch\u1ea1y tr\u00ean c\u1ee5m c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>kubectl get services<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" loading=\"lazy\" width=\"813\" height=\"148\" src=\"http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-36-1.png\" alt=\"\" class=\"wp-image-1594\" srcset=\"http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-36-1.png 813w, http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-36-300x55-1.png 300w, http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-36-768x140-1.png 768w\" sizes=\"auto, (max-width: 813px) 100vw, 813px\" \/><\/figure>\n<ul>\n<li>Xem m\u1ee5c nh\u1eadp c\u1ee7a d\u1ecbch v\u1ee5 v\u00ed d\u1ee5, b\u1ea1n c\u00f3 th\u1ec3 t\u00ecm th\u1ea5y IP c\u00f4ng khai c\u1ee7a NodeBalancer trong c\u1ed9t EXTERNAL-IP.<\/li>\n<\/ul>\n<ul>\n<li>C\u1ed9t PORT(S) hi\u1ec3n th\u1ecb c\u1ed5ng \u0111\u1ebfn c\u1ee7a d\u1ecbch v\u1ee5 v\u00ed d\u1ee5 v\u00e0 NodePort.<\/li>\n<\/ul>\n<p>Xem chi ti\u1ebft v\u1ec1 d\u1ecbch v\u1ee5 v\u00ed d\u1ee5 \u0111\u1ec3 truy xu\u1ea5t th\u00f4ng tin v\u1ec1 NodeBalancer \u0111\u00e3 tri\u1ec3n khai:<\/p>\n<pre class=\"wp-block-code\"><code>kubectl describe service example-service<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" loading=\"lazy\" width=\"931\" height=\"439\" src=\"http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-37-1.png\" alt=\"\" class=\"wp-image-1595\" srcset=\"http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-37-1.png 931w, http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-37-300x141-1.png 300w, http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-37-768x362-1.png 768w\" sizes=\"auto, (max-width: 931px) 100vw, 931px\" \/><\/figure>\n<p><strong>\u0110\u1ecbnh c\u1ea5u h\u00ecnh NodeBalancer c\u1ee7a b\u1ea1n b\u1eb1ng ch\u00fa th\u00edch<\/strong><\/p>\n<p>Linode CCM ch\u1ea5p nh\u1eadn c\u00e1c ch\u00fa th\u00edch \u0111\u1ecbnh c\u1ea5u h\u00ecnh h\u00e0nh vi v\u00e0 c\u00e0i \u0111\u1eb7t c\u1ee7a NodeBalancers c\u01a1 b\u1ea3n trong c\u1ee5m c\u1ee7a b\u1ea1n.<\/p>\n<ul>\n<li>B\u1ea3ng b\u00ean d\u01b0\u1edbi cung c\u1ea5p danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c h\u1eadu t\u1ed1 ch\u00fa th\u00edch c\u00f3 s\u1eb5n.<\/li>\n<\/ul>\n<ul>\n<li>M\u1ed7i ch\u00fa th\u00edch ph\u1ea3i c\u00f3 ti\u1ec1n t\u1ed1 service.beta.kubernetes.io\/linode-loadbalancer-. V\u00ed d\u1ee5: gi\u00e1 tr\u1ecb ho\u00e0n ch\u1ec9nh cho ch\u00fa th\u00edch \u0111i\u1ec1u ti\u1ebft l\u00e0 service.beta.kubernetes.io\/linode-loadbalancer-throttle.<\/li>\n<\/ul>\n<ul>\n<li>C\u00e1c gi\u00e1 tr\u1ecb ch\u00fa th\u00edch nh\u01b0 http ph\u00e2n bi\u1ec7t ch\u1eef hoa ch\u1eef th\u01b0\u1eddng.<\/li>\n<\/ul>\n<p><strong>\u0110\u1ecbnh c\u1ea5u h\u00ecnh NodeBalancer \u0111\u1ec3 m\u00e3 h\u00f3a TLS<\/strong><\/p>\n<p>Ph\u1ea7n n\u00e0y m\u00f4 t\u1ea3 c\u00e1ch thi\u1ebft l\u1eadp ch\u1ea5m d\u1ee9t TLS tr\u00ean Linode NodeBalancer c\u1ee7a b\u1ea1n \u0111\u1ec3 c\u00f3 th\u1ec3 truy c\u1eadp D\u1ecbch v\u1ee5 Kubernetes qua HTTPS.<\/p>\n<p><strong>T\u1ea1o b\u00ed m\u1eadt lo\u1ea1i TLS<\/strong><\/p>\n<p>Kubernetes cho ph\u00e9p b\u1ea1n l\u01b0u tr\u1eef th\u00f4ng tin nh\u1ea1y c\u1ea3m trong m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng B\u00ed m\u1eadt \u0111\u1ec3 s\u1eed d\u1ee5ng trong c\u1ee5m c\u1ee7a m\u00ecnh. \u0110i\u1ec1u n\u00e0y r\u1ea5t h\u1eefu \u00edch \u0111\u1ec3 l\u01b0u tr\u1eef nh\u1eefng th\u1ee9 nh\u01b0 m\u1eadt kh\u1ea9u v\u00e0 m\u00e3 th\u00f4ng b\u00e1o API. Trong ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd t\u1ea1o m\u1ed9t b\u00ed m\u1eadt Kubernetes \u0111\u1ec3 l\u01b0u tr\u1eef c\u00e1c ch\u1ee9ng ch\u1ec9 v\u00e0 kh\u00f3a B\u1ea3o m\u1eadt l\u1edbp v\u1eadn chuy\u1ec3n (TLS). sau \u0111\u00f3 b\u1ea1n s\u1ebd s\u1eed d\u1ee5ng \u0111\u1ec3 \u0111\u1ecbnh c\u1ea5u h\u00ecnh vi\u1ec7c ch\u1ea5m d\u1ee9t TLS tr\u00ean Linode NodeBalancer c\u1ee7a m\u00ecnh.<\/p>\n<p>Trong ng\u1eef c\u1ea3nh c\u1ee7a Linode CCM, B\u00ed m\u1eadt r\u1ea5t h\u1eefu \u00edch \u0111\u1ec3 l\u01b0u tr\u1eef c\u00e1c ch\u1ee9ng ch\u1ec9 v\u00e0 kh\u00f3a B\u1ea3o m\u1eadt l\u1edbp truy\u1ec1n t\u1ea3i (TLS). Ch\u00fa th\u00edch linode-loadbalancer-tls y\u00eau c\u1ea7u l\u01b0u tr\u1eef c\u00e1c ch\u1ee9ng ch\u1ec9 v\u00e0 kh\u00f3a TLS d\u01b0\u1edbi d\u1ea1ng B\u00ed m\u1eadt Kubernetes v\u1edbi lo\u1ea1i tls. ph\u1ea7n n\u00e0y \u0111\u1ec3 t\u1ea1o B\u00ed m\u1eadt TLS Kubernetes.<\/p>\n<p class=\"has-background\" style=\"background-color:#cbf2e3\">C\u00e1c b\u01b0\u1edbc trong ph\u1ea7n n\u00e0y s\u1ebd t\u1ea1o ch\u1ee9ng ch\u1ec9 TLS t\u1ef1 k\u00fd. \u0110\u1ec3 t\u00ecm hi\u1ec3u c\u00e1ch t\u1ea1o ch\u1ee9ng ch\u1ec9 TLS t\u1eeb c\u01a1 quan c\u1ea5p ch\u1ee9ng ch\u1ec9 Let&#8217;s Encrypt (CA) v\u00e0 \u00e1p d\u1ee5ng n\u00f3 cho \u1ee9ng d\u1ee5ng ch\u1ea1y tr\u00ean Kubernetes, h\u00e3y xem \u0110\u1ecbnh c\u1ea5u h\u00ecnh c\u00e2n b\u1eb1ng t\u1ea3i v\u1edbi m\u00e3 h\u00f3a TLS tr\u00ean. m\u1ed9t c\u1ee5m Kubernetes.<\/p>\n<ul>\n<li>T\u1ea1o kh\u00f3a v\u00e0 ch\u1ee9ng ch\u1ec9 TLS b\u1eb1ng b\u1ed9 c\u00f4ng c\u1ee5 TLS nh\u01b0 OpenSSL. \u0110\u1ea3m b\u1ea3o thay \u0111\u1ed5i gi\u00e1 tr\u1ecb CN v\u00e0 O th\u00e0nh gi\u00e1 tr\u1ecb c\u1ee7a mi\u1ec1n trang web c\u1ee7a ri\u00eang b\u1ea1n.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>openssl req -newkey rsa:4096 \\<br> -x509 \\<br> -sha256 \\<br> -days 3650 \\<br> -nodes \\<br> -out tls.crt \\<br> -keyout tls.key \\<br> -subj \"\/CN=mywebsite.com\/O=mywebsite.com\"<\/code><\/pre>\n<ul>\n<li>T\u1ea1o b\u00ed m\u1eadt b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng l\u1ec7nh t\u1ea1o b\u00ed m\u1eadt tls. \u0110\u1ea3m b\u1ea3o b\u1ea1n thay th\u1ebf $SECRET_NAME b\u1eb1ng t\u00ean m\u00e0 b\u1ea1n mu\u1ed1n \u0111\u1eb7t cho b\u00ed m\u1eadt c\u1ee7a m\u00ecnh. \u0110\u00e2y s\u1ebd l\u00e0 c\u00e1ch b\u1ea1n tham chi\u1ebfu b\u00ed m\u1eadt trong b\u1ea3ng k\u00ea khai D\u1ecbch v\u1ee5 c\u1ee7a m\u00ecnh.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code><code>kubectl create secret tls $SECRET_NAME --cert tls.crt --key tls.key<\/code><\/code><\/pre>\n<p>B\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m tra \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o B\u00ed m\u1eadt c\u1ee7a m\u00ecnh \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef th\u00e0nh c\u00f4ng b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng m\u00f4 t\u1ea3:<\/p>\n<pre class=\"wp-block-code\"><code>kubectl describe secret $SECRET_NAME<\/code><\/pre>\n<p>B\u1ea1n s\u1ebd th\u1ea5y \u0111\u1ea7u ra nh\u01b0 sau:<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" loading=\"lazy\" width=\"951\" height=\"358\" src=\"http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-40-1.png\" alt=\"\" class=\"wp-image-1598\" srcset=\"http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-40-1.png 951w, http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-40-300x113-1.png 300w, http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/image-40-768x289-1.png 768w\" sizes=\"auto, (max-width: 951px) 100vw, 951px\" \/><\/figure>\n<p><strong>\u0110\u1ecbnh c\u1ea5u h\u00ecnh TLS trong m\u1ed9t d\u1ecbch v\u1ee5<\/strong><\/p>\n<p>Theo m\u1eb7c \u0111\u1ecbnh, Kubernetes kh\u00f4ng hi\u1ec3n th\u1ecb c\u00e1c D\u1ecbch v\u1ee5 c\u00f3 ch\u1ea5m d\u1ee9t TLS qua HTTPS, \u0111\u1ec3 s\u1eed d\u1ee5ng https, b\u1ea1n c\u1ea7n h\u01b0\u1edbng d\u1eabn D\u1ecbch v\u1ee5 s\u1eed d\u1ee5ng \u0111\u00fang c\u1ed5ng b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c ch\u00fa th\u00edch \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u. B\u1ea1n c\u00f3 th\u1ec3 th\u00eam \u0111o\u1ea1n m\u00e3 sau v\u00e0o t\u1ec7p D\u1ecbch v\u1ee5 \u0111\u1ec3 b\u1eadt. Ch\u1ea5m d\u1ee9t TLS tr\u00ean NodeBalancer c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>\u2026<br>metadata:<br>annotations:<br>service.beta.kubernetes.io\/linode-loadbalancer-default-protocol: http<br>service.beta.kubernetes.io\/linode-loadbalancer-port-443: '{ \"tls-secret-name\": \"example-secret\", \"protocol\": \"https\" }'<br>\u2026<\/code><\/pre>\n<ul>\n<li>Ch\u00fa th\u00edch service.beta.kubernetes.io\/linode-loadbalancer-default-protocol c\u1ee7a anh \u1ea5y \u0111\u1ecbnh c\u1ea5u h\u00ecnh giao th\u1ee9c m\u1eb7c \u0111\u1ecbnh c\u1ee7a NodeBalancer.<\/li>\n<\/ul>\n<ul>\n<li>service.beta.kubernetes.io\/linode-loadbalancer-port-443 ch\u1ec9 \u0111\u1ecbnh c\u1ed5ng 443 l\u00e0m c\u1ed5ng \u0111\u01b0\u1ee3c \u0111\u1ecbnh c\u1ea5u h\u00ecnh. Gi\u00e1 tr\u1ecb c\u1ee7a ch\u00fa th\u00edch n\u00e0y l\u00e0 \u0111\u1ed1i t\u01b0\u1ee3ng JSON thi\u1ebft k\u1ebf t\u00ean b\u00ed m\u1eadt TLS \u0111\u1ec3 s\u1eed d\u1ee5ng (v\u00ed d\u1ee5-b\u00ed m\u1eadt) v\u00e0 giao th\u1ee9c \u0111\u1ec3 s\u1eed d\u1ee5ng. s\u1eed d\u1ee5ng cho c\u1ed5ng \u0111ang \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh (https).<\/li>\n<\/ul>\n<p>N\u1ebfu b\u1ea1n c\u00f3 nhi\u1ec1u B\u00ed m\u1eadt v\u00e0 c\u1ed5ng cho c\u00e1c m\u00f4i tr\u01b0\u1eddng kh\u00e1c nhau (th\u1eed nghi\u1ec7m, ch\u1ea1y th\u1eed, v.v.), b\u1ea1n c\u00f3 th\u1ec3 x\u00e1c \u0111\u1ecbnh nhi\u1ec1u c\u1eb7p c\u1ed5ng v\u00e0 b\u00ed m\u1eadt:<\/p>\n<pre class=\"wp-block-code\"><code>\u2026<br>metadata:<br>annotations:<br>service.beta.kubernetes.io\/linode-loadbalancer-default-protocol: http<br>service.beta.kubernetes.io\/linode-loadbalancer-port-443: '{ \"tls-secret-name\": \"example-secret\", \"protocol\": \"https\" }'<br>service.beta.kubernetes.io\/linode-loadbalancer-port-8443: '{ \"tls-secret-name\": \"example-secret-staging\", \"protocol\": \"https\" }'<br>\u2026<\/code><\/pre>\n<p><strong>\u0110\u1ecbnh c\u1ea5u h\u00ecnh m\u1ed1i quan h\u1ec7 phi\u00ean cho nh\u00f3m c\u1ee5m<\/strong><\/p>\n<p>kube-proxy s\u1ebd lu\u00f4n c\u1ed1 g\u1eafng chuy\u1ec3n l\u01b0u l\u01b0\u1ee3ng truy c\u1eadp proxy \u0111\u1ebfn m\u1ed9t Pod ph\u1ee5 tr\u1ee3 ng\u1eabu nhi\u00ean. \u0110\u1ec3 h\u01b0\u1edbng l\u01b0u l\u01b0\u1ee3ng truy c\u1eadp \u0111\u1ebfn c\u00f9ng m\u1ed9t Pod, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u01a1 ch\u1ebf sessionAffinity. Khi \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh clientIP, sessionAffinity s\u1ebd \u0111\u1ea3m b\u1ea3o r\u1eb1ng t\u1ea5t c\u1ea3 l\u01b0u l\u01b0\u1ee3ng truy c\u1eadp t\u1eeb c\u00f9ng m\u1ed9t IP s\u1ebd \u0111\u01b0\u1ee3c chuy\u1ec3n h\u01b0\u1edbng. v\u00e0o c\u00f9ng m\u1ed9t Pod. B\u1ea1n c\u00f3 th\u1ec3 th\u00eam c\u00e1c d\u00f2ng v\u00ed d\u1ee5 v\u00e0o t\u1ec7p c\u1ea5u h\u00ecnh D\u1ecbch v\u1ee5.<\/p>\n<pre class=\"wp-block-code\"><code>spec:<br>type: LoadBalancer<br>selector:<br>app: example-app<br>sessionAffinity: ClientIP<br>sessionAffinityConfig:<br>clientIP:<br>timeoutSeconds: 100<\/code><\/pre>\n<p><strong>X\u00f3a NodeBalancers kh\u1ecfi c\u1ee5m Kubernetes c\u1ee7a b\u1ea1n<\/strong><\/p>\n<p>\u0110\u1ec3 x\u00f3a NodeBalancer v\u00e0 D\u1ecbch v\u1ee5 m\u00e0 n\u00f3 \u0111\u1ea1i di\u1ec7n, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng t\u1ec7p k\u00ea khai D\u1ecbch v\u1ee5 m\u00e0 b\u1ea1n \u0111\u00e3 s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o NodeBalancer. Ch\u1ec9 c\u1ea7n s\u1eed d\u1ee5ng l\u1ec7nh x\u00f3a v\u00e0 cung c\u1ea5p t\u00ean t\u1ec7p c\u1ee7a b\u1ea1n k\u00e8m theo c\u1edd f:<\/p>\n<pre class=\"wp-block-code\"><code>kubectl delete -f example-service.yaml<\/code><\/pre>\n<p>T\u01b0\u01a1ng t\u1ef1, b\u1ea1n c\u00f3 th\u1ec3 x\u00f3a D\u1ecbch v\u1ee5 theo t\u00ean:<\/p>\n<pre class=\"wp-block-code\"><code>kubectl delete service example-service<\/code><\/pre>\n<p>Sau khi x\u00f3a d\u1ecbch v\u1ee5 c\u1ee7a b\u1ea1n, NodeBalancer t\u01b0\u01a1ng \u1ee9ng c\u1ee7a n\u00f3 s\u1ebd b\u1ecb x\u00f3a kh\u1ecfi t\u00e0i kho\u1ea3n Linode c\u1ee7a b\u1ea1n.<\/p>\n<p class=\"has-background\" style=\"background-color:#c6fae5\">N\u1ebfu t\u1ec7p D\u1ecbch v\u1ee5 c\u1ee7a b\u1ea1n s\u1eed d\u1ee5ng ch\u00fa th\u00edch l\u01b0u gi\u1eef, NodeBalancer c\u01a1 b\u1ea3n s\u1ebd kh\u00f4ng b\u1ecb x\u00f3a kh\u1ecfi t\u00e0i kho\u1ea3n Linode c\u1ee7a b\u1ea1n. H\u00e3y xem ph\u1ea7n tham kh\u1ea3o ch\u00fa th\u00edch \u0111\u1ec3 bi\u1ebft chi ti\u1ebft.<\/p>\n<p>Ngu\u1ed3n: https:\/\/techdocs.akamai.com\/cloud-computing\/docs\/get-started-with-load-balancing-on-an-lke-cluster<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Linode Kubernetes Engine (LKE) l\u00e0 d\u1ecbch v\u1ee5 Kubernetes \u0111\u01b0\u1ee3c Linode qu\u1ea3n l\u00fd. Khi tri\u1ec3n khai c\u1ee5m LKE, b\u1ea1n s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c Kubernetes Master ch\u1ea1y c\u00e1c th\u00e0nh ph\u1ea7n m\u1eb7t ph\u1eb3ng \u0111i\u1ec1u khi\u1ec3n c\u1ee7a c\u1ee5m m\u00e0 kh\u00f4ng m\u1ea5t th\u00eam ph\u00ed. M\u1eb7t ph\u1eb3ng \u0111i\u1ec1u khi\u1ec3n bao g\u1ed3m Tr\u00ecnh qu\u1ea3n l\u00fd b\u1ed9 \u0111i\u1ec1u khi\u1ec3n \u0111\u00e1m m\u00e2y (CCM) c\u1ee7a Linode.<\/p>\n","protected":false},"author":1,"featured_media":35947,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[79],"tags":[],"class_list":["post-34948","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linode-kubernetes-engine"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34948"}],"version-history":[{"count":1,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34948\/revisions"}],"predecessor-version":[{"id":35948,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34948\/revisions\/35948"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35947"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34948"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34948"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}