Thứ Năm, 24 tháng 3, 2022

[Rancher] Updating a private CA

 I. References

  1. https://rancher.com/docs/rancher/v2.0-v2.4/en/installation/resources/update-ca-cert/
  2. https://mariadb.com/docs/security/encryption/in-transit/create-self-signed-certificates-keys-openssl/
  3. https://medium.com/@superseb/zero-to-rancher-2-x-single-install-using-created-self-signed-certificates-in-5-minutes-5f9fe11fceb0
  4. https://chowdera.com/2021/04/20210420154722157P.html
  5. https://www.suse.com/c/rancher_blog/manual-rotation-of-certificates-in-rancher-kubernetes-clusters/
  6. https://rancher.com/docs/rancher/v2.0-v2.4/en/cluster-admin/certificate-rotation/
  7. https://github.com/rancher/rancher/issues/32210
  8. https://tienbm90.medium.com/how-to-renew-rancher-certificates-when-expired-cf8f05942eac

II. Các bước thực hiện

Dấu hiệu nhận biến lỗi

https://127.0.0.1:6443/apis/management.cattle.io/v3/nodes?timeout=30s: x509: certificate has expired or is not yet valid

B1. Backup rancher

docker create --volumes-from priceless_pare --name rancher-data-20220324 registry.ott.vas.com:8443/rancher/rancher:v2.4.5

docker run  --volumes-from rancher-data-20220324 -v $PWD:/backup:z registry.ott.vas.com:8443/busybox tar pzcvf /backup/rancher-data-backup-2.4.5-20220324.tar.gz /var/lib/rancher


B2. Generate CA

https://medium.com/@superseb/zero-to-rancher-2-x-single-install-using-created-self-signed-certificates-in-5-minutes-5f9fe11fceb0

mkdir -p /home/recommen/env/rancher/certs

cd /home/recommen/env/rancher

docker run -v $PWD/ssl:/certs \

           -e CA_SUBJECT="Rancher tv360 viettel" \

           -e CA_EXPIRE="36500" \

           -e SSL_EXPIRE="36500" \

           -e SSL_SUBJECT="10.240.158.51:8443" \

           -e SSL_DNS="10.240.158.51:8443" \

           -e SILENT="true" \

           registry.ott.vas.com:8443/superseb/omgwtfssl:latest


B3. Tao lai rancher

docker run -d --restart=unless-stopped -p 8080:80 -p 8443:443 \

   --volumes-from rancher-data-20220324 \

   -v $PWD/ssl/cert.pem:/etc/rancher/ssl/cert.pem \

   -v $PWD/ssl/key.pem:/etc/rancher/ssl/key.pem \

   -v $PWD/ssl/ca.pem:/etc/rancher/ssl/cacerts.pem \

   --name rancher_server \

   registry.ott.vas.com:8443/rancher/rancher:v2.4.5

   

B4. Update cert tren agent

https://rancher.com/docs/rancher/v2.0-v2.4/en/installation/resources/update-ca-cert/

Method 2: Manually update checksum

$ curl -k -s -fL <RANCHER_SERVER>/v3/settings/cacerts | jq -r .value > cacert.tmp

$ sha256sum cacert.tmp | awk '{print $1}'

$ kubectl edit -n cattle-system ds/cattle-node-agent

$ kubectl edit -n cattle-system deployment/cattle-cluster-agent

Update checksum CATTLE_CA_CHECKSUM

Thứ Năm, 10 tháng 3, 2022

[Spring-boot] simple metrics with prometheus

 A. References

  1. https://www.callicoder.com/spring-boot-actuator/
  2. https://micrometer.io/docs
  3. https://prometheus.io/ 
  4. https://grafana.com/docs/grafana/latest/
B. Demo show chỉ số từ ứng dụng Spring-boot sang Prometheus và vẽ biểu đồ lên Grafana
I. Ứng dụng Spring boot exposing các chỉ số metrics từ ứng dụng

1. Khởi tạo ứng dụng
Tạo ứng dụng chọn các Dependencies:
- Spring boot Actuator
- Prometheus


Hoặc add thêm dependencies vào pom.xml

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <scope>runtime</scope> </dependency>


Hiển thị danh sách các actuator enpoint như dưới



2. Cấu hình chỉ cần hiển thị các enpoint phù hợp
Trong file app.properties thêm các cấu hình sau
# Use "*" to expose all endpoints, or a comma-separated list to expose selected ones
management.endpoints.web.exposure.include=health,info,prometheus
management.endpoints.web.exposure.exclude=
Cấu hình port chạy metrics:

management.server.port=8081

3. Một số loại actuator enpoint thông dụng
3.1 /health
  • Check trạng thái ứng dụng, có thể kết hợp một số loại chỉ số check khác như trạng thái kết nối đến Database, Redis, MongoDb, hoặc tùy chỉnh một chỉ số cần check.
Để hiển thị chi tiết hơn thông tin, thêm tham số sau vào file cấu hình app.properties
# HEALTH ENDPOINT
management.endpoint.health.show-details=always


  • Tùy chỉnh chỉ số health check.
Có thể tao các chỉ số health check riêng bằng cách implement từ interface HealthIndicator hoặc extend từ abstract class AbstractHealthIndicator
package com.example.actuatordemo.health;

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;

@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        // Use the builder to build the health status details that should be reported.
        // If you throw an exception, the status will be DOWN with the exception message.
        
        builder.up()
                .withDetail("app", "Alive and Kicking")
                .withDetail("error", "Nothing! I'm good.");
    }
}

Kết quả sau khi truy cập link http://localhost:8080/actuator/health
{
   "status":"UP",
   "details":{
      "custom":{
         "status":"UP",
         "details":{
            "app":"Alive and Kicking",
            "error":"Nothing! I'm good."
         }
      },
      "diskSpace":{
         "status":"UP",
         "details":{
            "total":250790436864,
            "free":97949245440,
            "threshold":10485760
         }
      }
   }
}
3.2 /Metrics
list tất cả các metrics mà có thể theo dõi


Để lấy chi tiết 1 metrics truy cập theo link http://localhost:8080/actuator/metrics/{metrics name}
VD: http://localhost:8080/actuator/metrics/system.cpu.count

3.3 /prometheus
Các chỉ số prometheus để bên prometheus có thể scrap dữ liệu, có thể tra cứu xem các tham số ứng dụng đẩy lên prometheus đã có ở đây chưa.




4. Bảo mật Actuator Endpoint với Spring Security
Actuator Enpoint là nhạy cảm cần được bảo mật để chặn các truy cập trái phép. Có thể sử dụng Spring Security để bảo mật nếu ứng dụng chưa có cơ chế bảo mật.
  • Add thêm dependency vào ứng dụng
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  • Thêm class sau để override lại default spring security và định nghĩa các rule truy cập
package com.example.actuatordemo.config;

import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.boot.actuate.context.ShutdownEndpoint;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {

    /*
        This spring security configuration does the following

        1. Restrict access to the Shutdown endpoint to the ACTUATOR_ADMIN role.
        2. Allow access to all other actuator endpoints.
        3. Allow access to static resources.
        4. Allow access to the home page (/).
        5. All other requests need to be authenticated.
        5. Enable http basic authentication to make the configuration complete.
           You are free to use any other form of authentication.
     */

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))
                        .hasRole("ACTUATOR_ADMIN")
                    .requestMatchers(EndpointRequest.toAnyEndpoint())
                        .permitAll()
                    .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
                        .permitAll()
                    .antMatchers("/")
                        .permitAll()
                    .antMatchers("/**")
                        .authenticated()
                .and()
                .httpBasic();
    }
}
  • Thêm tham số sau vào cấu hình
# Spring Security Default user name and password
spring.security.user.name=actuator
spring.security.user.password=actuator
spring.security.user.roles=ACTUATOR_ADMIN
5. Tùy chỉnh các chỉ số metrics

II. Kết nối ứng dụng với prometheus
1. Cài đặt Prometheus

2. Cấu hình thêm ứng dụng cần monitor vào file prometheus.yml
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
    - targets: ['127.0.0.1:9090']

  - job_name: 'spring-actuator'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['HOST_IP:8080']
3. View chỉ số trên Prometheus


III. Kết nối Grafana
1. Cài đặt grafana
2. Add prometheus data source trên Grafana


3. Add Dashboard trên Grafana