k8s 安装ingress-nginx后代理kubernetes-dashboard

准备

  1. k8s 集群,版本为1.9.5
  2. kubernetes-dashboard 为 v1.8.3

安装 kubernetes-dashboard

  1. 直接使用官方的命令安装

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
  2. 暴露端口,以便访问,用完之后改回

    kubectl -n kube-system edit service kubernetes-dashboard

    按 i 进入插入模式 修改 type 值 ClusterIP 为NodePort 然后按 esc ,再按 x 回车保存

  3. 查看端口

    kubectl -n kube-system get service kubernetes-dashboard
    NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
    kubernetes-dashboard   10.100.124.90   <nodes>       443:31707/TCP   21h

    其中 31707就是外部可以访问的 ip

在 coreos 上部署 Convoy docker 插件

前言

  • docker swarm 需要共享数据
  • coreos 相对其他 Linux 系统部署 nfs 的资料少

首先在 coreos 启用 nfs 参考

  1. 创建文件夹用来开启 nfs mkdir /mnt/nfs

  2. 编辑 nfs 的 配置文件

    vim /etc/exports

    /mnt/nfs  127.0.0.1(rw,sync,no_subtree_check,no_root_squash)
  3. 在 coreos 启用 nfs 服务 systemctl enable nfs

nfs 服务只需要在一台服务器上启动就可以,其它服务器只需要挂载

安装 convoy 参考

  1. 下载安装

Spring Security 配置 ignoring 不生效的问题

遇到的问题

给 Spring Security 加上了一个 filter,配置了 ignoring 但是,filter 还是会拦截到 ignoring 的路径,导致 ignoring 不生效。

问题代码

@Bean
private InjectResourceSecurityFilter mySecurityFilter() throws Exception {
    return new InjectResourceSecurityFilter(securityMetadataSource,
            accessDecisionManager, authenticationManagerBean());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .addFilterBefore(mySecurityFilter(), InjectResourceSecurityFilter.class)
            .authorizeRequests()
            .antMatchers("/static/**").permitAll()
            .antMatchers("/index.html", "/").permitAll()

            .anyRequest().authenticated()
            .and()
            .csrf().disable();
}

@Override
public void configure(WebSecurity web) throws Exception {
    super.configure(web);
    web.ignoring()
            .antMatchers("/static/**", "/index.html",
                    "/favicon.ico", "/");
}

解决问题

通过 Google 找到在 stackoverflow上的一个回答 stackoverflow 上说去掉 filter 上的 Component 注解就好,由于我在这里写的是 @Bean,所以把@Bean 给去掉,解决 ignoring 不生效的问题。

使用kubespray部署kubernetes集群

准备工作

  1. 因为是部署集群,所以需要两台机器,(我使用的是digitalocean这个云提供商)
  2. 内存至少1.5GB 以上,不然会安装失败。
  3. 需要每一台机器都能 ping 通

我的一些配置

  1. 系统为 centos7
  2. 节点的信息 这里使用digitalocean提供的内网地址

准备安装

  1. 修改主节点的 hosts 文件,把节点ip 和名字写进去 vi /etc/hosts

    10.132.37.154 master
    10.132.45.167 node1
  2. 所有节点无密码登录

    1. 生成无密码的密钥对,用来进行主节点到副节点之间的无密码登录。 直接全都回车,生成的密钥对在 ~/.ssh 目录下面,默认名称为 id_rsaid_rsa.pub
      ssh-keygen
    2. 把公钥分别写到主节点和副节点的~/.ssh/authorized_keys 文件中。 注意:每个节点都有添加这个公钥,不管是本机还是其他机器
    # 先查看 id_rsa.pub 内容,复制出来,贴贴到 authorized_keys文件的最末尾
    cat ~/.ssh/id_rsa.pub
    # 贴到末尾
    vi ~/.ssh/authorized_keys
  3. 在主节点安装pip

liquibase 踩坑记

liquibase 踩坑记

liquibase 是跨多种数据库平台的数据库迁移和初始化工具,但是在迁移到其它数据库平台的时候会遇到各种字段类型不一致导致出错。由于我使用的是 SpringBoot 和 hibernate,并且在 hibernate 初始化的时候打开了 validate,所以从不同数据库迁移会出问题。

uuid 出错的问题

当在 hibernate 里面使用了 uuid 的时候,在postgresql 里面是正常的,但是在使用 MySQL 的时候 hibernate 会报一下错误found [char (Types#CHAR)], but expecting [binary(255) (Types#BINARY)] ,所以需要 liquibase 里面写上以下配置。

<!--  uuid 类型的定义  -->
<property name="type.uuid" value="RAW(16)" dbms="oracle"/>
<property name="type.uuid" value="UUID" dbms="h2"/>
<property name="type.uuid" value="UNIQUEIDENTIFIER" dbms="mssql"/>
<property name="type.uuid" value="BINARY(16)" dbms="mysql"/>
<property name="type.uuid" value="uuid" dbms="postgresql"/>

然后修改 liquibase uuid 的 column 节点配置

<!--  把之前的 type="uuid" 改为 ${type.uuid}  -->
<column name="id" remarks="ID" type="${type.uuid}">
</column>

以上配置只支持 oracle,h2,mssql,mysql,postgresql,如需要其他数据库请根据下面的类型对应表查找liquibase 对应数据库的类型