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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

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,如:

ports:
  - name: http
    nodePort: 8482
    port: 8080
    protocol: TCP
    targetPort: 8080
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
16 1
K8S的Service的LoadBanlance之Metallb解决方案
|
5天前
|
存储 Kubernetes 监控
|
15天前
|
Kubernetes 网络安全 容器
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
|
15天前
|
Kubernetes 负载均衡 网络协议
在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
|
19天前
|
Kubernetes 监控 API
在k8S中,Metric Service是什么?
在k8S中,Metric Service是什么?
|
19天前
|
Kubernetes 负载均衡 网络协议
在k8S中,Headless Service是什么?
在k8S中,Headless Service是什么?
|
15天前
|
Kubernetes 负载均衡 网络协议
在K8S中,Service的类型有哪些?
在K8S中,Service的类型有哪些?
|
15天前
|
Kubernetes 网络协议 Docker
在K8S中,ip-cer-pod与docker原生端口映射有何区别?
在K8S中,ip-cer-pod与docker原生端口映射有何区别?
|
15天前
|
Kubernetes API 容器
在K8S中,Service的Nodeport端口范围?
在K8S中,Service的Nodeport端口范围?
|
15天前
|
Kubernetes 网络协议 网络安全
在K8S中,如果不能在容器内部使用netstat查看端口号的情况下,还有其他方式吗?
在K8S中,如果不能在容器内部使用netstat查看端口号的情况下,还有其他方式吗?
下一篇
DDNS