• kubernetes session保持、容器root特权模式开启、多端口容器service 2个端口开启等设置


    session保持
    如何在service内部实现session保持呢?当然是在service的yaml里进行设置啦。

    在service的yaml的sepc里加入以下代码:

    sessionAffinity: ClientIP
    sessionAffinityConfig:
        clientIP:
          timeoutSeconds: 10800

    这样就开启了session保持。下面的timeoutSeconds指的是session保持的时间,这个时间默认是10800秒,也就是三个小时。

    那么原理是啥呢?当不设置session保持时,service向后台pod转发规则是轮询。当设置了session保持之后,k8s会根据访问的ip来把请求转发给他以前访问过的pod,这样session就保持住了。

    容器root权限
    你一定很奇怪,明明进入容器内,可以看到是root用户啊,为什么还要设置容器的root权限?这是因为容器内虽然看起来是root,但是却没有root的所有功能。当需要修改系统文件时,就不被允许。如果你的app恰好就要去修改系统文件,那么就需要明白如何设置容器的root权限。

    想要开启容器的root权限,需要做以下操作:

    1.设置kube-apiserver与kubelet的

    -allow-privileged=true

    这样就允许节点上的容器开启privileged。

    怎么看当前是不是为true呢?

    ps -ef|grep kube

    然后仔细看,你就会看到是不是为true。

    那么如何设置以上参数呢?

    因为kube-apiserver与kubelet都是通过二进制文件直接运行的,所以直接在重启时加入以上参数就行。更简单的是,如果已经设置了systemd启动,那么就去/etc/systemd/system/下找到对应的.service文件,改里面的参数,然后通过systemctl命令直接重启就行。

    2.设置包含contariners的yaml文件(如deploy的yaml文件),在containers下添加:

    securityContext:
            privileged: true

    例如pod的yaml文件:

    apiVersion: v1
    kind: Pod
    metadata:
      name: hello-world
    spec:
      containers:
        - name: hello-world-container
          # The container definition
          # ...
          securityContext:
            privileged: true

      这个很好理解,但是切记要把这个与podSecurityContext分开。
      podSecurityContext是在pod.spec内的属性,虽然它也写作securityContext
      securityContext是container内的属性
    podSecurityContext的例子如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: hello-world
    spec:
      containers:
      # specification of the pod’s containers
      # ...
      securityContext:
        fsGroup: 1234
        supplementalGroups: [5678]
        seLinuxOptions:
          level: "s0:c123,c456"

    多端口容器
    如果app需要开放两个端口,该怎么办呢?
    有两种办法,
    - 第一种是起2个service,每个service开放一个端口
    - 第二种是同一个service开放2个端口

    下面分析两种方法。

    起两个service
    明明可以用一个service搞定,为什么还要起两个service呢?我认为是让service更清晰,一个service负责一种服务。

    例如,有个app,同时开发9200与9300端口。9200提供web服务,9300提供api。那么,用两个service,分别命名为app-http与app-api,分别暴露9200与9300端口,分别为nodePort与clusterIP方式,这样层次清晰。

    同一个service开2个端口
    一般我们只有一个端口的时候,在service的yaml文件:

    ports:
      - nodePort: 8482
        port: 8080
        protocol: TCP
        targetPort: 8080

    而如果你想开两个端口,直接复制粘贴可不行,k8s会提示你必须要加上name。所以,如果要开多端口,要为每个port都指定一个name,如:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      ports:
        - name: http
          protocol: TCP
          port: 80
          targetPort: 9376
        - name: https
          protocol: TCP
          port: 443
          targetPort: 9377

    https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
    转:https://blog.csdn.net/bingzhilingyi/article/details/79862791

  • 相关阅读:
    java基础之final
    java基础之finally(转)
    java 中 == 与 equals 的区别
    转载:日志分析
    eclipse配置Git
    Gitlab使用笔记:新建工程
    hadoop,spark的启动及DataNode无法启动的解决方法
    HTTP Status 500
    springmvc4.0配置ajax请求json格式数据
    jq load()方法中加载文件中元素事件绑定失效的问题
  • 原文地址:https://www.cnblogs.com/linyouyi/p/11706527.html
Copyright © 2020-2023  润新知