kubernetes集群配置serviceaccount,安装与行使

Posted by

Ingress 介绍

Kubernetes 上安顿的微服务运转在它的个体互连网中,
通过Pod实例的hostPort或Service实例的NodePort能够揭穿到主机端口上,便于用户访问。但这么的方法会占领多台主机的HTTP端口或一台主机的八个端口,既浪费端口财富又追加管理难度和安全危机。

 

K8S的 Ingress 对象提供了另一种服务暴光的办法,它只占用一台主机的 HTTP
端口,通过虚拟主机大概虚拟目录的主意为K八S上的具备HTTP服务提供暴光服务,还是能兑现
HTTPS、负载均衡、状态总计等成效。

 

K8S 的 nginx ingress 的功能类似于 mesos 的
marathon-lb,不一样点是:前者基于 nginx;后者基于 haproxy。

 

有关nginx ingress的设置,K八S有连锁认证,网络也有成都百货上千文书档案可参看:

 

但在初期安装中,依据官方网站的表达并从未得逞,查阅了汪洋素材,并结成执行最后消除了难点。上面分享一下本身的装置进度。

 

Ingress 介绍

Kubernetes 上配备的微服务运维在它的个人网络中,
通过Pod实例的hostPort或Service实例的NodePort可以暴光到主机端口上,便于用户访问。但那样的方法会据有多台主机的HTTP端口或壹台主机的五个端口,既浪费端口能源又充实处理难度和平安风险。

 

K捌S的 Ingress 对象提供了另1种服务暴光的方式,它只占用壹台主机的 HTTP
端口,通过虚拟主机或然虚拟目录的方法为K八S上的富有HTTP服务提供揭示服务,还可以落到实处HTTPS、负载均衡、状态总计等功效。

 

K8S 的 nginx ingress 的效应类似于 mesos 的
marathon-lb,差别点是:前者基于 nginx;后者基于 haproxy。

 

有关nginx ingress的装置,K八S有相关表达,网络也有诸多文书档案可参考:

 

但在中期安装中,遵照官方网址的求证并不曾马到成功,查阅了汪洋素材,并构成施行最后解除了难点。下边分享一下自家的安装进程。

 

kubernetes集群配置serviceaccount

Kubernetes API的别的服务。ServiceAccount它并不是给kubernetes集群的用户使用的,而是给pod里面包车型客车进度使用的,它为pod提供必需的地方注脚。

Kubernetes提供了Secret来管理敏感音信,近日Secret的等级次序有叁种: 
Opaque(default): 放4字符串 
kubernetes.io/service-account-token: 作用于ServiceAccount
kubernetes.io/dockercfg: 成效于Docker
registry,用户下载docker镜像认证使用。

正文将介绍在kubernetes集群中计划serviceaccount和secret,能够让kubernetes使用个人仓库,并协助nginx
basic认证。由于大家应用的是rpm包格局安装的kubernetes集群,默许未有ca.crt、kubecfg.crt
kubecfg.key 、server.cert 、server.key那些文件,须求下载源码生成。

一、使用工具生成key文件

# mkdir git
# cd git/
# git clone

毋庸置疑上网格局下载easy-rsa.tar.gz,下载地址在make-ca-cert.sh脚本中能够找到,将文件放到~/kube目录下

# ls ~/kube
easy-rsa.tar.gz
# cd /root/git/kubernetes/
# sh cluster/CentOS/make-ca-cert.sh 192.168.115.5
# ls /srv/kubernetes/
ca.crt  kubecfg.crt  kubecfg.key  server.cert  server.key
# chown -R kube:kube /srv/kubernetes/*

将那么些文件发送到vm二主机的同一目录

# chown -R kube:kube /srv/kubernetes/*
# scp -rp /srv/
[email protected]:/

2、修改配置文件

# grep -v ‘^#’ /etc/kubernetes/apiserver |grep -v ‘^$’
KUBE_API_ADDRESS=”–insecure-bind-address=192.168.115.5″
KUBE_ETCD_SERVERS=”–etcd-servers=”
KUBE_SERVICE_ADDRESSES=”–service-cluster-ip-range=10.254.0.0/16″
KUBE_ADMISSION_CONTROL=”–admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ServiceAccount,SecurityContextDeny,ResourceQuota”
KUBE_API_ARGS=”–storage-backend=etcd2 –secure-port=6443
–client-ca-file=/srv/kubernetes/ca.crt
–tls-cert-file=/srv/kubernetes/server.cert
–tls-private-key-file=/srv/kubernetes/server.key”# grep -v ‘^#’
/etc/kubernetes/controller-manager |grep -v ‘^$’
KUBE_CONTROLLER_MANAGER_ARGS=”–root-ca-file=/srv/kubernetes/ca.crt
–service-account-private-key-file=/srv/kubernetes/server.key”

3、重启相关服务

Master:
# systemctl restart kube-apiserver
# systemctl restart kube-controller-manager
# systemctl restart kube-scheduler

Slave:
# systemctl restart kubelet
# systemctl restart kube-proxy

# kubectl get secret   
# kubectl describe secret default-token-6pddn

图片 1

肆、通过安顿secret,让kubernetes能够从个体酒店中拉取镜像

# kubectl create secret docker-registry regsecret \
–docker-server=registry.fjhb.cn  \
–docker-username=ylw \
 –docker-password=123 \
 [email protected]

图片 2
在yaml文件sepc节插足imagePullSecrets,钦赐使用成立好的secret
图片 3

# kubectl create -f frontend-controller.yaml

因而参考kubernetes的合法文档,并无法化解实际难点

图片 4

nginx日志依然报40一验证错误
图片 5

咱俩知晓使用docker pull去私有仓库拉取镜像,须求先使用docker
login登入一下私有旅馆,而login实行的操作,实际上正是在用户的家目录写入了.docker/config.json文件。将此文件做1个软链接到
/var/lib/kubelet/.docker/就足以化解此主题素材了。当配置了软连接后就不必要在yaml文件中援引后面包车型地铁创设的secret了。

# cat /root/.docker/config.json
# ln -s /root/.docker/ /var/lib/kubelet/.docker/

图片 6

# kubectl create -f frontend-controller.yaml

图片 7

正文永世更新链接地址:

Kubernetes
API的此外服务。瑟维斯Account它并不是给kubernetes集群的用户使用的,而是给pod里面包车型大巴历程使用的,它为…

一. 备选安装碰着

K8S 1.2

一. 预备安装境况

K8S 1.2

2. 启用Kubernetes API 认证

这一步不可能忽视,不然nginx ingress不能够运维;

 

还有几点要越发注意,不然nginx ingress运转时会冒出TLS握手战败的不当:

1)必须生成serviceAccount证书

证件生成好后参考官方网站文书档案在apiserver和controller-manager中启用

 

二)必须将Kubernetes的内网IP或域名加入到server.crt

#Add Cluster IP of kubernetes to server.crt
subjectAltName=`kubectl get services –all-namespaces |grep
‘default’|grep ‘kubernetes’|grep ‘443’|awk ‘{print $3}’`
echo subjectAltName=IP:${subjectAltName} > extfile.cnf

#According to the ca.key, ca.crt and server.csr generate the
server.crt:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key
-CAcreateserial -extfile extfile.cnf -out server.crt -days 10000

 

三)更新证书后重启 K八S 并更新 secret 和 serviceaccount

kubectl get secret –all-namespaces

kubectl get serviceaccount –all-namespaces

翻看 default 伊始的 secret 和
serviceaccount,将其删除,系统会自行重新生成;

设若上述操作后某个 pod 仍出现TLS握手错误,则删除相关 deployment 可能replicant后重新安排。

 

2. 启用Kubernetes API 认证

这一步不能够忽视,不然nginx ingress不可能运行;

 

还有几点要越发注意,不然nginx ingress运转时会冒出TLS握手退步的不当:

壹)必须生成serviceAccount证书

证书生成好后参考官方网站文书档案在apiserver和controller-manager中启用

 

2)必须将Kubernetes的内网IP或域名到场到server.crt

#Add Cluster IP of kubernetes to server.crt
subjectAltName=`kubectl get services –all-namespaces |grep
‘default’|grep ‘kubernetes’|grep ‘443’|awk ‘{print $3}’`
echo subjectAltName=IP:${subjectAltName} > extfile.cnf

#According to the ca.key, ca.crt and server.csr generate the
server.crt:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key
-CAcreateserial -extfile extfile.cnf -out server.crt -days 10000

 

叁)更新证书后重启 K八S 并更新 secret 和 serviceaccount

kubectl get secret –all-namespaces

kubectl get serviceaccount –all-namespaces

翻看 default 起始的 secret 和
serviceaccount,将其除去,系统会自行重新生成;

一旦上述操作后某个 pod 仍现身TLS握手错误,则删除相关 deployment 恐怕replicant后重新安顿。

 

3. 安装 Nginx Ingress

做完上述希图职业后,就足以服从官方文书档案进行设置了:

 

注:为了展现 nginx_status,供给在80, 4四3 之外再爆出 nginx ingress
的8080端口:

        ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 8080
          hostPort: 8080
        - containerPort: 443
          hostPort: 443

 

而且安插贰个configmap文件,启用nginx的vts模块:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-load-balancer-conf
data:
  enable-vts-status: "true"
~                               

  

3. 安装 Nginx Ingress

做完上述盘算干活后,就足以听从合法文书档案进行安装了:

 

注:为了浮现 nginx_status,需求在80, 4肆三 之外再爆出 nginx ingress
的8080端口:

        ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 8080
          hostPort: 8080
        - containerPort: 443
          hostPort: 443

 

再正是布置二个configmap文件,启用nginx的vts模块:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-load-balancer-conf
data:
  enable-vts-status: "true"
~                               

  

4. 实例

上边选拔 nginx ingress 基于虚拟主机对 kubernetes-dashboards
实行劳动揭露,并扩大HTTPS功效:

4. 实例

下边选取 nginx ingress 基于虚拟主机对 kubernetes-dashboards
进行劳动揭示,并扩充HTTPS功效:

4.1 创建 dashboard secret

留意:创制密钥时,请填入虚拟主机名,举个例子:k八s-dashboard.gkkxd.com,不然HTTPS访问会被驳回。

4.1 创建 dashboard secret

瞩目:创造密钥时,请填入虚拟主机名,比如:k八s-dashboard.gkkxd.com,不然HTTPS访问会被驳回。

4.2 部署 dashboard

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: kubernetes-dashboard
    version: v1.1.0
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubernetes-dashboard
  template:
    metadata:
      labels:
        app: kubernetes-dashboard
    spec:
      containers:
      - name: kubernetes-dashboard
        image: 172.31.17.36:5000/kubernetes-dashboard-amd64:v1.1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
          # Uncomment the following line to manually specify Kubernetes API server Host
          # If not specified, Dashboard will attempt to auto discover the API server and connect
          # to it. Uncomment only if the default does not work.
          - --apiserver-host=http://172.31.17.81:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 9090
  selector:
    app: kubernetes-dashboard

注:请将service 的port 设置为80

4.2 部署 dashboard

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: kubernetes-dashboard
    version: v1.1.0
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubernetes-dashboard
  template:
    metadata:
      labels:
        app: kubernetes-dashboard
    spec:
      containers:
      - name: kubernetes-dashboard
        image: 172.31.17.36:5000/kubernetes-dashboard-amd64:v1.1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
          # Uncomment the following line to manually specify Kubernetes API server Host
          # If not specified, Dashboard will attempt to auto discover the API server and connect
          # to it. Uncomment only if the default does not work.
          - --apiserver-host=http://172.31.17.81:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 9090
  selector:
    app: kubernetes-dashboard

注:请将service 的port 设置为80

4.3 创建 dashboard Ingress 实例

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: k8s-dashboard
  namespace: kube-system
spec:
  tls:
  - hosts:
    - k8s-dashboard.gkkxd.com
    secretName: k8s-dashboard-secret
  rules:
  - host: k8s-dashboard.gkkxd.com
    http:
      paths:
      - backend:
          serviceName: kubernetes-dashboard
          servicePort: 80
        path: /

注:请设置 tls, 虚拟主机名,backend service等参数

4.3 创建 dashboard Ingress 实例

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: k8s-dashboard
  namespace: kube-system
spec:
  tls:
  - hosts:
    - k8s-dashboard.gkkxd.com
    secretName: k8s-dashboard-secret
  rules:
  - host: k8s-dashboard.gkkxd.com
    http:
      paths:
      - backend:
          serviceName: kubernetes-dashboard
          servicePort: 80
        path: /

注:请设置 tls, 虚拟主机名,backend service等参数

4.4 设置 DNS 或 hosts文件

在 DNS 或 hosts文件中创立 k8s-dashboard.gkkxd.com 记录,之后就能够经过
或者
来访问 dashboard 了。

 图片 8

 

nginx status:

图片 9

 

4.4 设置 DNS 或 hosts文件

在 DNS 或 hosts文件中开创 k八s-dashboard.gkkxd.com 记录,之后就能够经过
或者
来访问 dashboard 了。

 图片 8

 

nginx status:

图片 9

 

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注