zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 13—Clustering 聚类
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机
    【原】机器学习公开课 目录(课程笔记、测验习题答案、编程作业源码)...持续更新...
    【原】Coursera—Andrew Ng机器学习—Week 11 习题—Photo OCR
    【原】Coursera—Andrew Ng机器学习—Week 10 习题—大规模机器学习
    【原】Coursera—Andrew Ng机器学习—Week 9 习题—异常检测
    【原】Coursera—Andrew Ng机器学习—Week 8 习题—聚类 和 降维
    【原】Coursera—Andrew Ng机器学习—Week 7 习题—支持向量机SVM
  • 原文地址:https://www.cnblogs.com/linyouyi/p/11706527.html
Copyright © 2011-2022 走看看