Kubernetes Nginx Ingress 安装与使用

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 目录 (Table of Contents) [TOCM] 概述 下载搭建环境所需要的镜像 配置default-http-bankend 配置inrgess-controller 配置需要测试的service 配置ingress 问题集 概述 用过kubernetes的人都知道,kubernetes的service的网络类型有三种:cluertip,nodeport,loadbanlance,各种类型的作用就不在这里描述了。

目录 (Table of Contents)

[TOCM]

概述

用过kubernetes的人都知道,kubernetes的service的网络类型有三种:cluertip,nodeport,loadbanlance,各种类型的作用就不在这里描述了。如果一个service想向外部暴露服务,有nodeport和loadbanlance类型,但是nodeport类型,你的知道service对应的pod所在的node的ip,而loadbanlance通常需要第三方云服务商提供支持。如果没有第三方服务商服务的就没办法做了。除此之外还有很多其他的替代方式,以下我主要讲解的是通过ingress的方式来实现service的对外服务的暴露。

下载搭建环境所需要的镜像

  • gcr.io/google_containers/nginx-ingress-controller:0.8.3 (ingress controller 的镜像)
  • gcr.io/google_containers/defaultbackend:1.0 (默认路由的servcie的镜像)
  • gcr.io/google_containers/echoserver:1.0 (用于测试ingress的service镜像,当然这个你可以换成你自己的service都可以)

说明:由于GFW的原因下载不下来的,都可以到时速云去下载相应的镜像(只要把grc.io换成index.tenxcloud.com就可以了),由于我用的是自己私用镜像仓库,所以之后看到的镜像都是我自己tag之后上传到自己私有镜像仓库的。

配置default-http-bankend

首先便捷default-http-backend.yaml:


apiVersion: v1
kind: ReplicationController
metadata:
 name: default-http-backend
spec:
 replicas: 1
 selector:
 app: default-http-backend
 template:
 metadata:
 labels:
 app: default-http-backend
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - name: default-http-backend
 # Any image is permissable as long as: # 1. It serves a 404 page at / # 2. It serves 200 on a /healthz endpoint
 image: hub.yfcloud.io/google_containers/defaultbackend:1.0
 livenessProbe:
 httpGet:
 path: /healthz
 port: 8080
 scheme: HTTP
 initialDelaySeconds: 30
 timeoutSeconds: 5
 ports:
 - containerPort: 8080
 resources:
 limits:
 cpu: 10m
 memory: 20Mi
 requests:
 cpu: 10m
 memory: 20Mi

然后创建创建default-http-backend的rc:

kubectl create -f default-http-backend .yaml

最后创建default-http-backend的service,有两种方式创建,一种是:便捷default-http-backend-service.yaml,另一种通过如下命令创建:

kubectl expose rc default-http-backend --port=80 --target-port=8080 --name=default-http-backend

最后查看相应的rc以及service是否成功创建:然后自己测试能否正常访问,访问方式如下,直接通过的pod的ip/healthz或者serive的ip/(如果是srevice的ip加port)

配置inrgess-controller

首先编辑ingress-controller.yaml文件:

apiVersion: v1
kind: ReplicationController
metadata:
 name: nginx-ingress-controller
 labels:
 k8s-app: nginx-ingress-lb
spec:
 replicas: 1
 selector:
 k8s-app: nginx-ingress-lb
 template:
 metadata:
 labels:
 k8s-app: nginx-ingress-lb
 name: nginx-ingress-lb
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - image: hub.yfcloud.io/google_containers/nginx-ingress-controller:0.8.3
 name: nginx-ingress-lb
 imagePullPolicy: Always
 readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1 # use downward API
 env:
 - name: POD_NAME
 valueFrom:
 fieldRef:
 fieldPath: metadata.name
 - name: POD_NAMESPACE
 valueFrom:
 fieldRef:
 fieldPath: metadata.namespace
 - name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080
 ports:
 - containerPort: 80
 hostPort: 80
 - containerPort: 443
 hostPort: 443
 args:
 - /nginx-ingress-controller
 - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
 imagePullSecrets:
 - name: hub.yfcloud.io.key

创建ingress-controller的rc:

kubectl create -f ingress-controller.yaml

最后验证ingress-controller是否正常启动成功,方法 如下:查看ingress-controller中对应pod的ip,然后通过ip:80/healthz 访问,成功的话会返回 ok。

配置需要测试的service

首先编辑测试用的test.yaml:

apiVersion: v1 kind: ReplicationController metadata:
 name: echoheaders
spec:
 replicas: 1
 template:
 metadata:
 labels:
 app: echoheaders
 spec:
 containers:
 - name: echoheaders
 image: hub.yfcloud.io/google_containers/echoserver:test
 ports:
 - containerPort: 8080

测试service的yaml这里创建多个:
sv-alp-default.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-default
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30302
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-x.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-x
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30301
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-y.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-y
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30284
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

接着是

配置ingress

编辑ingress-alp.yaml:

apiVersion: extensions/v1beta1 kind: Ingress metadata:
 name: echomap
spec:
 rules:
 - host: foo.bar.com
 http:
 paths:
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80
 - host: bar.baz.com
 http:
 paths:
 - path: /bar
 backend:
 serviceName: echoheaders-y
 servicePort: 80
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80

最后测试,测试方法有两种,如下:

方法一:

curl -v http://nodeip:80/foo -H 'host: foo.bar.com'

结果如下:

* About to connect() to 183.131.19.232 port 80 (#0)
* Trying 183.131.19.232...
* Connected to 183.131.19.232 (183.131.19.232) port 80 (#0)
> GET /foo HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> host: foo.bar.com
> 
< HTTP/1.1 200 OK
< Server: nginx/1.11.3
< Date: Wed, 12 Oct 2016 10:04:40 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< 
CLIENT VALUES:
client_address=('10.1.58.3', 57364) (10.1.58.3)
command=GET
path=/foo
real path=/foo
query=
request_version=HTTP/1.1

SERVER VALUES:
server_version=BaseHTTP/0.6
sys_version=Python/3.5.0
protocol_version=HTTP/1.0

HEADERS RECEIVED:
Accept=*/*
Connection=close
Host=foo.bar.com
User-Agent=curl/7.29.0
X-Forwarded-For=183.131.19.231
X-Forwarded-Host=foo.bar.com
X-Forwarded-Port=80
X-Forwarded-Proto=http
X-Real-IP=183.131.19.231
* Connection #0 to host 183.131.19.232 left intact

其他路由的测试修改对应的url即可。

**注意:**nodeip是你的ingress-controller所对应的pod所在的node的ip。

方法二:
将访问url的主机的host中加上:

nodeip foo.bar.com nodeip bar.baz.com

在浏览器中直接访问:

foo.bar.com/foo
bar.baz.com/bar
bar.baz.com/foo

都是可以的。

问题集

在创建ingress-controller的时候报错(ingress的yaml文件是官网中的yaml文件配置,我只改了相对应的镜像。):

问题一:

这里写图片描述

以上错误信息是ingress-controller创建失败的原因,通过docker log 查看rc中的对应的ingress-controller的容器的日志。

原因:从错误信息来看是因为ingress内部程序默认是通过localhost:8080连接master的apiserver,如果是单机版的k8s环境,就不会报这个错,如果是集群环境,并且你的ingress-controller的pod所对应的容器不是在master节点上(因为有的集群环境master也是node,这样的话,如果你的pod对应的容器在master节点上也不会报这个错),就会报这个错。

解决方法:在ingress-controller.yaml中加上如下参数,

- name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080

之后的yaml文件就是如前面定义的yaml文件。

问题二:

这个问题是在创建ingress rc成功之后,马上查看rc对应的pod对应的容器时报的错!

这里写图片描述

从这个问题衍生出个连带的问题,如下图:

问题1:
这个问题是在创建ingress rc成功之后,当第一个容器失败,rc的垃圾机制回收第一次创建停止的容器后,重新启动的容器。查看rc对应的pod对应的容器时报的错!

这里写图片描述

原因:因为ingress中的源码的健康检查的url改成了 /healthz,而官方文档中的yaml中定义的健康检查的路由是/ingress-controller-healthz,这个url是ingress的自检url,当超过8次之后如果得到结果还是unhealthy,则会挂掉ingress对应的容器。

解决方法:将yaml中的健康检查的url改成:/healthz即可。:

readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1

目录 (Table of Contents)

[TOCM]

概述

用过kubernetes的人都知道,kubernetes的service的网络类型有三种:cluertip,nodeport,loadbanlance,各种类型的作用就不在这里描述了。如果一个service想向外部暴露服务,有nodeport和loadbanlance类型,但是nodeport类型,你的知道service对应的pod所在的node的ip,而loadbanlance通常需要第三方云服务商提供支持。如果没有第三方服务商服务的就没办法做了。除此之外还有很多其他的替代方式,以下我主要讲解的是通过ingress的方式来实现service的对外服务的暴露。

下载搭建环境所需要的镜像

  • gcr.io/google_containers/nginx-ingress-controller:0.8.3 (ingress controller 的镜像)
  • gcr.io/google_containers/defaultbackend:1.0 (默认路由的servcie的镜像)
  • gcr.io/google_containers/echoserver:1.0 (用于测试ingress的service镜像,当然这个你可以换成你自己的service都可以)

说明:由于GFW的原因下载不下来的,都可以到时速云去下载相应的镜像(只要把grc.io换成index.tenxcloud.com就可以了),由于我用的是自己私用镜像仓库,所以之后看到的镜像都是我自己tag之后上传到自己私有镜像仓库的。

配置default-http-bankend

首先便捷default-http-backend.yaml:

apiVersion: v1
kind: ReplicationController
metadata:
 name: default-http-backend
spec:
 replicas: 1
 selector:
 app: default-http-backend
 template:
 metadata:
 labels:
 app: default-http-backend
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - name: default-http-backend
 # Any image is permissable as long as: # 1. It serves a 404 page at / # 2. It serves 200 on a /healthz endpoint
 image: hub.yfcloud.io/google_containers/defaultbackend:1.0
 livenessProbe:
 httpGet:
 path: /healthz
 port: 8080
 scheme: HTTP
 initialDelaySeconds: 30
 timeoutSeconds: 5
 ports:
 - containerPort: 8080
 resources:
 limits:
 cpu: 10m
 memory: 20Mi
 requests:
 cpu: 10m
 memory: 20Mi

然后创建创建default-http-backend的rc:

kubectl create -f default-http-backend .yaml

最后创建default-http-backend的service,有两种方式创建,一种是:便捷default-http-backend-service.yaml,另一种通过如下命令创建:

kubectl expose rc default-http-backend --port=80 --target-port=8080 --name=default-http-backend

最后查看相应的rc以及service是否成功创建:然后自己测试能否正常访问,访问方式如下,直接通过的pod的ip/healthz或者serive的ip/(如果是srevice的ip加port)

配置inrgess-controller

首先编辑ingress-controller.yaml文件:

apiVersion: v1
kind: ReplicationController
metadata:
 name: nginx-ingress-controller
 labels:
 k8s-app: nginx-ingress-lb
spec:
 replicas: 1
 selector:
 k8s-app: nginx-ingress-lb
 template:
 metadata:
 labels:
 k8s-app: nginx-ingress-lb
 name: nginx-ingress-lb
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - image: hub.yfcloud.io/google_containers/nginx-ingress-controller:0.8.3
 name: nginx-ingress-lb
 imagePullPolicy: Always
 readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1 # use downward API
 env:
 - name: POD_NAME
 valueFrom:
 fieldRef:
 fieldPath: metadata.name
 - name: POD_NAMESPACE
 valueFrom:
 fieldRef:
 fieldPath: metadata.namespace
 - name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080
 ports:
 - containerPort: 80
 hostPort: 80
 - containerPort: 443
 hostPort: 443
 args:
 - /nginx-ingress-controller
 - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
 imagePullSecrets:
 - name: hub.yfcloud.io.key

创建ingress-controller的rc:

kubectl create -f ingress-controller.yaml

最后验证ingress-controller是否正常启动成功,方法 如下:查看ingress-controller中对应pod的ip,然后通过ip:80/healthz 访问,成功的话会返回 ok。

配置需要测试的service

首先编辑测试用的test.yaml:

apiVersion: v1 kind: ReplicationController metadata:
 name: echoheaders
spec:
 replicas: 1
 template:
 metadata:
 labels:
 app: echoheaders
 spec:
 containers:
 - name: echoheaders
 image: hub.yfcloud.io/google_containers/echoserver:test
 ports:
 - containerPort: 8080

测试service的yaml这里创建多个:
sv-alp-default.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-default
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30302
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-x.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-x
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30301
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-y.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-y
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30284
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

接着是

配置ingress

编辑ingress-alp.yaml:

apiVersion: extensions/v1beta1 kind: Ingress metadata:
 name: echomap
spec:
 rules:
 - host: foo.bar.com
 http:
 paths:
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80
 - host: bar.baz.com
 http:
 paths:
 - path: /bar
 backend:
 serviceName: echoheaders-y
 servicePort: 80
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80

最后测试,测试方法有两种,如下:

方法一:

curl -v http://nodeip:80/foo -H 'host: foo.bar.com'

结果如下:

* About to connect() to 183.131.19.232 port 80 (#0)
* Trying 183.131.19.232...
* Connected to 183.131.19.232 (183.131.19.232) port 80 (#0)
> GET /foo HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> host: foo.bar.com
> 
< HTTP/1.1 200 OK
< Server: nginx/1.11.3
< Date: Wed, 12 Oct 2016 10:04:40 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< 
CLIENT VALUES:
client_address=('10.1.58.3', 57364) (10.1.58.3)
command=GET
path=/foo
real path=/foo
query=
request_version=HTTP/1.1

SERVER VALUES:
server_version=BaseHTTP/0.6
sys_version=Python/3.5.0
protocol_version=HTTP/1.0

HEADERS RECEIVED:
Accept=*/*
Connection=close
Host=foo.bar.com
User-Agent=curl/7.29.0
X-Forwarded-For=183.131.19.231
X-Forwarded-Host=foo.bar.com
X-Forwarded-Port=80
X-Forwarded-Proto=http
X-Real-IP=183.131.19.231
* Connection #0 to host 183.131.19.232 left intact

其他路由的测试修改对应的url即可。

**注意:**nodeip是你的ingress-controller所对应的pod所在的node的ip。

方法二:
将访问url的主机的host中加上:

nodeip foo.bar.com nodeip bar.baz.com

在浏览器中直接访问:

foo.bar.com/foo
bar.baz.com/bar
bar.baz.com/foo

都是可以的。

问题集

在创建ingress-controller的时候报错(ingress的yaml文件是官网中的yaml文件配置,我只改了相对应的镜像。):

问题一:

这里写图片描述

以上错误信息是ingress-controller创建失败的原因,通过docker log 查看rc中的对应的ingress-controller的容器的日志。

原因:从错误信息来看是因为ingress内部程序默认是通过localhost:8080连接master的apiserver,如果是单机版的k8s环境,就不会报这个错,如果是集群环境,并且你的ingress-controller的pod所对应的容器不是在master节点上(因为有的集群环境master也是node,这样的话,如果你的pod对应的容器在master节点上也不会报这个错),就会报这个错。

解决方法:在ingress-controller.yaml中加上如下参数,

- name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080

之后的yaml文件就是如前面定义的yaml文件。

问题二:

这个问题是在创建ingress rc成功之后,马上查看rc对应的pod对应的容器时报的错!

这里写图片描述

从这个问题衍生出个连带的问题,如下图:

问题1:
这个问题是在创建ingress rc成功之后,当第一个容器失败,rc的垃圾机制回收第一次创建停止的容器后,重新启动的容器。查看rc对应的pod对应的容器时报的错!

这里写图片描述

原因:因为ingress中的源码的健康检查的url改成了 /healthz,而官方文档中的yaml中定义的健康检查的路由是/ingress-controller-healthz,这个url是ingress的自检url,当超过8次之后如果得到结果还是unhealthy,则会挂掉ingress对应的容器。

解决方法:将yaml中的健康检查的url改成:/healthz即可。:

readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1

目录 (Table of Contents)

[TOCM]

概述

用过kubernetes的人都知道,kubernetes的service的网络类型有三种:cluertip,nodeport,loadbanlance,各种类型的作用就不在这里描述了。如果一个service想向外部暴露服务,有nodeport和loadbanlance类型,但是nodeport类型,你的知道service对应的pod所在的node的ip,而loadbanlance通常需要第三方云服务商提供支持。如果没有第三方服务商服务的就没办法做了。除此之外还有很多其他的替代方式,以下我主要讲解的是通过ingress的方式来实现service的对外服务的暴露。

下载搭建环境所需要的镜像

  • gcr.io/google_containers/nginx-ingress-controller:0.8.3 (ingress controller 的镜像)
  • gcr.io/google_containers/defaultbackend:1.0 (默认路由的servcie的镜像)
  • gcr.io/google_containers/echoserver:1.0 (用于测试ingress的service镜像,当然这个你可以换成你自己的service都可以)

说明:由于GFW的原因下载不下来的,都可以到时速云去下载相应的镜像(只要把grc.io换成index.tenxcloud.com就可以了),由于我用的是自己私用镜像仓库,所以之后看到的镜像都是我自己tag之后上传到自己私有镜像仓库的。

配置default-http-bankend

首先便捷default-http-backend.yaml:

apiVersion: v1
kind: ReplicationController
metadata:
 name: default-http-backend
spec:
 replicas: 1
 selector:
 app: default-http-backend
 template:
 metadata:
 labels:
 app: default-http-backend
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - name: default-http-backend
 # Any image is permissable as long as: # 1. It serves a 404 page at / # 2. It serves 200 on a /healthz endpoint
 image: hub.yfcloud.io/google_containers/defaultbackend:1.0
 livenessProbe:
 httpGet:
 path: /healthz
 port: 8080
 scheme: HTTP
 initialDelaySeconds: 30
 timeoutSeconds: 5
 ports:
 - containerPort: 8080
 resources:
 limits:
 cpu: 10m
 memory: 20Mi
 requests:
 cpu: 10m
 memory: 20Mi

然后创建创建default-http-backend的rc:

kubectl create -f default-http-backend .yaml

最后创建default-http-backend的service,有两种方式创建,一种是:便捷default-http-backend-service.yaml,另一种通过如下命令创建:

kubectl expose rc default-http-backend --port=80 --target-port=8080 --name=default-http-backend

最后查看相应的rc以及service是否成功创建:然后自己测试能否正常访问,访问方式如下,直接通过的pod的ip/healthz或者serive的ip/(如果是srevice的ip加port)

配置inrgess-controller

首先编辑ingress-controller.yaml文件:

apiVersion: v1
kind: ReplicationController
metadata:
 name: nginx-ingress-controller
 labels:
 k8s-app: nginx-ingress-lb
spec:
 replicas: 1
 selector:
 k8s-app: nginx-ingress-lb
 template:
 metadata:
 labels:
 k8s-app: nginx-ingress-lb
 name: nginx-ingress-lb
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - image: hub.yfcloud.io/google_containers/nginx-ingress-controller:0.8.3
 name: nginx-ingress-lb
 imagePullPolicy: Always
 readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1 # use downward API
 env:
 - name: POD_NAME
 valueFrom:
 fieldRef:
 fieldPath: metadata.name
 - name: POD_NAMESPACE
 valueFrom:
 fieldRef:
 fieldPath: metadata.namespace
 - name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080
 ports:
 - containerPort: 80
 hostPort: 80
 - containerPort: 443
 hostPort: 443
 args:
 - /nginx-ingress-controller
 - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
 imagePullSecrets:
 - name: hub.yfcloud.io.key

创建ingress-controller的rc:

kubectl create -f ingress-controller.yaml

最后验证ingress-controller是否正常启动成功,方法 如下:查看ingress-controller中对应pod的ip,然后通过ip:80/healthz 访问,成功的话会返回 ok。

配置需要测试的service

首先编辑测试用的test.yaml:

apiVersion: v1 kind: ReplicationController metadata:
 name: echoheaders
spec:
 replicas: 1
 template:
 metadata:
 labels:
 app: echoheaders
 spec:
 containers:
 - name: echoheaders
 image: hub.yfcloud.io/google_containers/echoserver:test
 ports:
 - containerPort: 8080

测试service的yaml这里创建多个:
sv-alp-default.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-default
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30302
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-x.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-x
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30301
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-y.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-y
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30284
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

接着是

配置ingress

编辑ingress-alp.yaml:

apiVersion: extensions/v1beta1 kind: Ingress metadata:
 name: echomap
spec:
 rules:
 - host: foo.bar.com
 http:
 paths:
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80
 - host: bar.baz.com
 http:
 paths:
 - path: /bar
 backend:
 serviceName: echoheaders-y
 servicePort: 80
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80

最后测试,测试方法有两种,如下:

方法一:

curl -v http://nodeip:80/foo -H 'host: foo.bar.com'

结果如下:

* About to connect() to 183.131.19.232 port 80 (#0)
* Trying 183.131.19.232...
* Connected to 183.131.19.232 (183.131.19.232) port 80 (#0)
> GET /foo HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> host: foo.bar.com
> 
< HTTP/1.1 200 OK
< Server: nginx/1.11.3
< Date: Wed, 12 Oct 2016 10:04:40 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< 
CLIENT VALUES:
client_address=('10.1.58.3', 57364) (10.1.58.3)
command=GET
path=/foo
real path=/foo
query=
request_version=HTTP/1.1

SERVER VALUES:
server_version=BaseHTTP/0.6
sys_version=Python/3.5.0
protocol_version=HTTP/1.0

HEADERS RECEIVED:
Accept=*/*
Connection=close
Host=foo.bar.com
User-Agent=curl/7.29.0
X-Forwarded-For=183.131.19.231
X-Forwarded-Host=foo.bar.com
X-Forwarded-Port=80
X-Forwarded-Proto=http
X-Real-IP=183.131.19.231
* Connection #0 to host 183.131.19.232 left intact

其他路由的测试修改对应的url即可。

**注意:**nodeip是你的ingress-controller所对应的pod所在的node的ip。

方法二:
将访问url的主机的host中加上:

nodeip foo.bar.com nodeip bar.baz.com

在浏览器中直接访问:

foo.bar.com/foo
bar.baz.com/bar
bar.baz.com/foo

都是可以的。

问题集

在创建ingress-controller的时候报错(ingress的yaml文件是官网中的yaml文件配置,我只改了相对应的镜像。):

问题一:

这里写图片描述

以上错误信息是ingress-controller创建失败的原因,通过docker log 查看rc中的对应的ingress-controller的容器的日志。

原因:从错误信息来看是因为ingress内部程序默认是通过localhost:8080连接master的apiserver,如果是单机版的k8s环境,就不会报这个错,如果是集群环境,并且你的ingress-controller的pod所对应的容器不是在master节点上(因为有的集群环境master也是node,这样的话,如果你的pod对应的容器在master节点上也不会报这个错),就会报这个错。

解决方法:在ingress-controller.yaml中加上如下参数,

- name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080

之后的yaml文件就是如前面定义的yaml文件。

问题二:

这个问题是在创建ingress rc成功之后,马上查看rc对应的pod对应的容器时报的错!

这里写图片描述

从这个问题衍生出个连带的问题,如下图:

问题1:
这个问题是在创建ingress rc成功之后,当第一个容器失败,rc的垃圾机制回收第一次创建停止的容器后,重新启动的容器。查看rc对应的pod对应的容器时报的错!

这里写图片描述

原因:因为ingress中的源码的健康检查的url改成了 /healthz,而官方文档中的yaml中定义的健康检查的路由是/ingress-controller-healthz,这个url是ingress的自检url,当超过8次之后如果得到结果还是unhealthy,则会挂掉ingress对应的容器。

解决方法:将yaml中的健康检查的url改成:/healthz即可。:

readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1

目录 (Table of Contents)

[TOCM]

概述

用过kubernetes的人都知道,kubernetes的service的网络类型有三种:cluertip,nodeport,loadbanlance,各种类型的作用就不在这里描述了。如果一个service想向外部暴露服务,有nodeport和loadbanlance类型,但是nodeport类型,你的知道service对应的pod所在的node的ip,而loadbanlance通常需要第三方云服务商提供支持。如果没有第三方服务商服务的就没办法做了。除此之外还有很多其他的替代方式,以下我主要讲解的是通过ingress的方式来实现service的对外服务的暴露。

下载搭建环境所需要的镜像

  • gcr.io/google_containers/nginx-ingress-controller:0.8.3 (ingress controller 的镜像)
  • gcr.io/google_containers/defaultbackend:1.0 (默认路由的servcie的镜像)
  • gcr.io/google_containers/echoserver:1.0 (用于测试ingress的service镜像,当然这个你可以换成你自己的service都可以)

说明:由于GFW的原因下载不下来的,都可以到时速云去下载相应的镜像(只要把grc.io换成index.tenxcloud.com就可以了),由于我用的是自己私用镜像仓库,所以之后看到的镜像都是我自己tag之后上传到自己私有镜像仓库的。

配置default-http-bankend

首先便捷default-http-backend.yaml:

apiVersion: v1
kind: ReplicationController
metadata:
 name: default-http-backend
spec:
 replicas: 1
 selector:
 app: default-http-backend
 template:
 metadata:
 labels:
 app: default-http-backend
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - name: default-http-backend
 # Any image is permissable as long as: # 1. It serves a 404 page at / # 2. It serves 200 on a /healthz endpoint
 image: hub.yfcloud.io/google_containers/defaultbackend:1.0
 livenessProbe:
 httpGet:
 path: /healthz
 port: 8080
 scheme: HTTP
 initialDelaySeconds: 30
 timeoutSeconds: 5
 ports:
 - containerPort: 8080
 resources:
 limits:
 cpu: 10m
 memory: 20Mi
 requests:
 cpu: 10m
 memory: 20Mi

然后创建创建default-http-backend的rc:

kubectl create -f default-http-backend .yaml

最后创建default-http-backend的service,有两种方式创建,一种是:便捷default-http-backend-service.yaml,另一种通过如下命令创建:

kubectl expose rc default-http-backend --port=80 --target-port=8080 --name=default-http-backend

最后查看相应的rc以及service是否成功创建:然后自己测试能否正常访问,访问方式如下,直接通过的pod的ip/healthz或者serive的ip/(如果是srevice的ip加port)

配置inrgess-controller

首先编辑ingress-controller.yaml文件:

apiVersion: v1
kind: ReplicationController
metadata:
 name: nginx-ingress-controller
 labels:
 k8s-app: nginx-ingress-lb
spec:
 replicas: 1
 selector:
 k8s-app: nginx-ingress-lb
 template:
 metadata:
 labels:
 k8s-app: nginx-ingress-lb
 name: nginx-ingress-lb
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - image: hub.yfcloud.io/google_containers/nginx-ingress-controller:0.8.3
 name: nginx-ingress-lb
 imagePullPolicy: Always
 readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1 # use downward API
 env:
 - name: POD_NAME
 valueFrom:
 fieldRef:
 fieldPath: metadata.name
 - name: POD_NAMESPACE
 valueFrom:
 fieldRef:
 fieldPath: metadata.namespace
 - name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080
 ports:
 - containerPort: 80
 hostPort: 80
 - containerPort: 443
 hostPort: 443
 args:
 - /nginx-ingress-controller
 - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
 imagePullSecrets:
 - name: hub.yfcloud.io.key

创建ingress-controller的rc:

kubectl create -f ingress-controller.yaml

最后验证ingress-controller是否正常启动成功,方法 如下:查看ingress-controller中对应pod的ip,然后通过ip:80/healthz 访问,成功的话会返回 ok。

配置需要测试的service

首先编辑测试用的test.yaml:

apiVersion: v1 kind: ReplicationController metadata:
 name: echoheaders
spec:
 replicas: 1
 template:
 metadata:
 labels:
 app: echoheaders
 spec:
 containers:
 - name: echoheaders
 image: hub.yfcloud.io/google_containers/echoserver:test
 ports:
 - containerPort: 8080

测试service的yaml这里创建多个:
sv-alp-default.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-default
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30302
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-x.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-x
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30301
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-y.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-y
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30284
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

接着是

配置ingress

编辑ingress-alp.yaml:

apiVersion: extensions/v1beta1 kind: Ingress metadata:
 name: echomap
spec:
 rules:
 - host: foo.bar.com
 http:
 paths:
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80
 - host: bar.baz.com
 http:
 paths:
 - path: /bar
 backend:
 serviceName: echoheaders-y
 servicePort: 80
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80

最后测试,测试方法有两种,如下:

方法一:

curl -v http://nodeip:80/foo -H 'host: foo.bar.com'

结果如下:

* About to connect() to 183.131.19.232 port 80 (#0)
* Trying 183.131.19.232...
* Connected to 183.131.19.232 (183.131.19.232) port 80 (#0)
> GET /foo HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> host: foo.bar.com
> 
< HTTP/1.1 200 OK
< Server: nginx/1.11.3
< Date: Wed, 12 Oct 2016 10:04:40 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< 
CLIENT VALUES:
client_address=('10.1.58.3', 57364) (10.1.58.3)
command=GET
path=/foo
real path=/foo
query=
request_version=HTTP/1.1

SERVER VALUES:
server_version=BaseHTTP/0.6
sys_version=Python/3.5.0
protocol_version=HTTP/1.0

HEADERS RECEIVED:
Accept=*/*
Connection=close
Host=foo.bar.com
User-Agent=curl/7.29.0
X-Forwarded-For=183.131.19.231
X-Forwarded-Host=foo.bar.com
X-Forwarded-Port=80
X-Forwarded-Proto=http
X-Real-IP=183.131.19.231
* Connection #0 to host 183.131.19.232 left intact

其他路由的测试修改对应的url即可。

**注意:**nodeip是你的ingress-controller所对应的pod所在的node的ip。

方法二:
将访问url的主机的host中加上:

nodeip foo.bar.com nodeip bar.baz.com

在浏览器中直接访问:

foo.bar.com/foo
bar.baz.com/bar
bar.baz.com/foo

都是可以的。

问题集

在创建ingress-controller的时候报错(ingress的yaml文件是官网中的yaml文件配置,我只改了相对应的镜像。):

问题一:

这里写图片描述

以上错误信息是ingress-controller创建失败的原因,通过docker log 查看rc中的对应的ingress-controller的容器的日志。

原因:从错误信息来看是因为ingress内部程序默认是通过localhost:8080连接master的apiserver,如果是单机版的k8s环境,就不会报这个错,如果是集群环境,并且你的ingress-controller的pod所对应的容器不是在master节点上(因为有的集群环境master也是node,这样的话,如果你的pod对应的容器在master节点上也不会报这个错),就会报这个错。

解决方法:在ingress-controller.yaml中加上如下参数,

- name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080

之后的yaml文件就是如前面定义的yaml文件。

问题二:

这个问题是在创建ingress rc成功之后,马上查看rc对应的pod对应的容器时报的错!

这里写图片描述

从这个问题衍生出个连带的问题,如下图:

问题1:
这个问题是在创建ingress rc成功之后,当第一个容器失败,rc的垃圾机制回收第一次创建停止的容器后,重新启动的容器。查看rc对应的pod对应的容器时报的错!

这里写图片描述

原因:因为ingress中的源码的健康检查的url改成了 /healthz,而官方文档中的yaml中定义的健康检查的路由是/ingress-controller-healthz,这个url是ingress的自检url,当超过8次之后如果得到结果还是unhealthy,则会挂掉ingress对应的容器。

解决方法:将yaml中的健康检查的url改成:/healthz即可。:

readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1

目录 (Table of Contents)

[TOCM]

概述

用过kubernetes的人都知道,kubernetes的service的网络类型有三种:cluertip,nodeport,loadbanlance,各种类型的作用就不在这里描述了。如果一个service想向外部暴露服务,有nodeport和loadbanlance类型,但是nodeport类型,你的知道service对应的pod所在的node的ip,而loadbanlance通常需要第三方云服务商提供支持。如果没有第三方服务商服务的就没办法做了。除此之外还有很多其他的替代方式,以下我主要讲解的是通过ingress的方式来实现service的对外服务的暴露。

下载搭建环境所需要的镜像

  • gcr.io/google_containers/nginx-ingress-controller:0.8.3 (ingress controller 的镜像)
  • gcr.io/google_containers/defaultbackend:1.0 (默认路由的servcie的镜像)
  • gcr.io/google_containers/echoserver:1.0 (用于测试ingress的service镜像,当然这个你可以换成你自己的service都可以)

说明:由于GFW的原因下载不下来的,都可以到时速云去下载相应的镜像(只要把grc.io换成index.tenxcloud.com就可以了),由于我用的是自己私用镜像仓库,所以之后看到的镜像都是我自己tag之后上传到自己私有镜像仓库的。

配置default-http-bankend

首先便捷default-http-backend.yaml:

apiVersion: v1
kind: ReplicationController
metadata:
 name: default-http-backend
spec:
 replicas: 1
 selector:
 app: default-http-backend
 template:
 metadata:
 labels:
 app: default-http-backend
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - name: default-http-backend
 # Any image is permissable as long as: # 1. It serves a 404 page at / # 2. It serves 200 on a /healthz endpoint
 image: hub.yfcloud.io/google_containers/defaultbackend:1.0
 livenessProbe:
 httpGet:
 path: /healthz
 port: 8080
 scheme: HTTP
 initialDelaySeconds: 30
 timeoutSeconds: 5
 ports:
 - containerPort: 8080
 resources:
 limits:
 cpu: 10m
 memory: 20Mi
 requests:
 cpu: 10m
 memory: 20Mi

然后创建创建default-http-backend的rc:

kubectl create -f default-http-backend .yaml

最后创建default-http-backend的service,有两种方式创建,一种是:便捷default-http-backend-service.yaml,另一种通过如下命令创建:

kubectl expose rc default-http-backend --port=80 --target-port=8080 --name=default-http-backend

最后查看相应的rc以及service是否成功创建:然后自己测试能否正常访问,访问方式如下,直接通过的pod的ip/healthz或者serive的ip/(如果是srevice的ip加port)

配置inrgess-controller

首先编辑ingress-controller.yaml文件:

apiVersion: v1
kind: ReplicationController
metadata:
 name: nginx-ingress-controller
 labels:
 k8s-app: nginx-ingress-lb
spec:
 replicas: 1
 selector:
 k8s-app: nginx-ingress-lb
 template:
 metadata:
 labels:
 k8s-app: nginx-ingress-lb
 name: nginx-ingress-lb
 spec:
 terminationGracePeriodSeconds: 60
 containers:
 - image: hub.yfcloud.io/google_containers/nginx-ingress-controller:0.8.3
 name: nginx-ingress-lb
 imagePullPolicy: Always
 readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1 # use downward API
 env:
 - name: POD_NAME
 valueFrom:
 fieldRef:
 fieldPath: metadata.name
 - name: POD_NAMESPACE
 valueFrom:
 fieldRef:
 fieldPath: metadata.namespace
 - name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080
 ports:
 - containerPort: 80
 hostPort: 80
 - containerPort: 443
 hostPort: 443
 args:
 - /nginx-ingress-controller
 - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
 imagePullSecrets:
 - name: hub.yfcloud.io.key

创建ingress-controller的rc:

kubectl create -f ingress-controller.yaml

最后验证ingress-controller是否正常启动成功,方法 如下:查看ingress-controller中对应pod的ip,然后通过ip:80/healthz 访问,成功的话会返回 ok。

配置需要测试的service

首先编辑测试用的test.yaml:

apiVersion: v1 kind: ReplicationController metadata:
 name: echoheaders
spec:
 replicas: 1
 template:
 metadata:
 labels:
 app: echoheaders
 spec:
 containers:
 - name: echoheaders
 image: hub.yfcloud.io/google_containers/echoserver:test
 ports:
 - containerPort: 8080

测试service的yaml这里创建多个:
sv-alp-default.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-default
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30302
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-x.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-x
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30301
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

sv-alp-y.yaml:

apiVersion: v1 kind: Service metadata:
 name: echoheaders-y
 labels:
 app: echoheaders
spec:
 type: NodePort
 ports:
 - port: 80
 nodePort: 30284
 targetPort: 8080
 protocol: TCP
 name: http
 selector:
 app: echoheaders

接着是

配置ingress

编辑ingress-alp.yaml:

apiVersion: extensions/v1beta1 kind: Ingress metadata:
 name: echomap
spec:
 rules:
 - host: foo.bar.com
 http:
 paths:
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80
 - host: bar.baz.com
 http:
 paths:
 - path: /bar
 backend:
 serviceName: echoheaders-y
 servicePort: 80
 - path: /foo
 backend:
 serviceName: echoheaders-x
 servicePort: 80

最后测试,测试方法有两种,如下:

方法一:

curl -v http://nodeip:80/foo -H 'host: foo.bar.com'

结果如下:

* About to connect() to 183.131.19.232 port 80 (#0)
* Trying 183.131.19.232...
* Connected to 183.131.19.232 (183.131.19.232) port 80 (#0)
> GET /foo HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> host: foo.bar.com
> 
< HTTP/1.1 200 OK
< Server: nginx/1.11.3
< Date: Wed, 12 Oct 2016 10:04:40 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< 
CLIENT VALUES:
client_address=('10.1.58.3', 57364) (10.1.58.3)
command=GET
path=/foo
real path=/foo
query=
request_version=HTTP/1.1

SERVER VALUES:
server_version=BaseHTTP/0.6
sys_version=Python/3.5.0
protocol_version=HTTP/1.0

HEADERS RECEIVED:
Accept=*/*
Connection=close
Host=foo.bar.com
User-Agent=curl/7.29.0
X-Forwarded-For=183.131.19.231
X-Forwarded-Host=foo.bar.com
X-Forwarded-Port=80
X-Forwarded-Proto=http
X-Real-IP=183.131.19.231
* Connection #0 to host 183.131.19.232 left intact

其他路由的测试修改对应的url即可。

**注意:**nodeip是你的ingress-controller所对应的pod所在的node的ip。

方法二:
将访问url的主机的host中加上:

nodeip foo.bar.com nodeip bar.baz.com

在浏览器中直接访问:

foo.bar.com/foo
bar.baz.com/bar
bar.baz.com/foo

都是可以的。

问题集

在创建ingress-controller的时候报错(ingress的yaml文件是官网中的yaml文件配置,我只改了相对应的镜像。):

问题一:

这里写图片描述

以上错误信息是ingress-controller创建失败的原因,通过docker log 查看rc中的对应的ingress-controller的容器的日志。

原因:从错误信息来看是因为ingress内部程序默认是通过localhost:8080连接master的apiserver,如果是单机版的k8s环境,就不会报这个错,如果是集群环境,并且你的ingress-controller的pod所对应的容器不是在master节点上(因为有的集群环境master也是node,这样的话,如果你的pod对应的容器在master节点上也不会报这个错),就会报这个错。

解决方法:在ingress-controller.yaml中加上如下参数,

- name: KUBERNETES_MASTER
 value: http://183.131.19.231:8080

之后的yaml文件就是如前面定义的yaml文件。

问题二:

这个问题是在创建ingress rc成功之后,马上查看rc对应的pod对应的容器时报的错!

这里写图片描述

从这个问题衍生出个连带的问题,如下图:

问题1:
这个问题是在创建ingress rc成功之后,当第一个容器失败,rc的垃圾机制回收第一次创建停止的容器后,重新启动的容器。查看rc对应的pod对应的容器时报的错!

这里写图片描述

原因:因为ingress中的源码的健康检查的url改成了 /healthz,而官方文档中的yaml中定义的健康检查的路由是/ingress-controller-healthz,这个url是ingress的自检url,当超过8次之后如果得到结果还是unhealthy,则会挂掉ingress对应的容器。

解决方法:将yaml中的健康检查的url改成:/healthz即可。:

readinessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 livenessProbe:
 httpGet:
 path: /healthz
 port: 80
 scheme: HTTP
 initialDelaySeconds: 10
 timeoutSeconds: 1
本文转自开源中国- Kubernetes Nginx Ingress 安装与使用
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
29天前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1天前
|
应用服务中间件 nginx
yum 安装报错 No package nginx available Error:Nothing to do
yum 安装报错 No package nginx available Error:Nothing to do
5 1
|
5天前
|
Kubernetes Linux 网络安全
kubeadm安装k8s
该文档提供了一套在CentOS 7.6上安装Docker和Kubernetes(kubeadm)的详细步骤,包括安装系统必备软件、关闭防火墙和SELinux、禁用swap、开启IP转发、设置内核参数、配置Docker源和加速器、安装指定版本Docker、启动Docker、设置kubelet开机启动、安装kubelet、kubeadm、kubectl、下载和配置Kubernetes镜像、初始化kubeadm、创建kubeconfig文件、获取节点加入集群命令、下载Calico YAML文件以及安装Calico。这些步骤不仅适用于v1.19.14,也适用于更高版本。
41 1
|
23天前
|
网络协议 应用服务中间件 网络安全
linxu安装nginx
linxu安装nginx
52 0
|
23天前
|
Kubernetes 测试技术 API
ChaosBlade常见问题之安装K8S探针心跳检测失败如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
19 0
|
30天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
34 5
|
30天前
|
存储 Kubernetes 监控
KubeSphere平台安装系列之一【Kubernetes上安装KubeSphere(亲测--实操完整版)】(1/3)
KubeSphere平台安装系列之一【Kubernetes上安装KubeSphere(亲测--实操完整版)】(1/3)
39 0
|
30天前
|
存储 Kubernetes 监控
K8S集群上安装KubeSphere的详细过程
K8S集群上安装KubeSphere的详细过程
26 0
|
1月前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
193 0
|
1月前
|
Kubernetes Linux Docker
深度解析:Kubernetes 1.28.2集群安装过程中的关键步骤
本文旨在为读者提供一份详尽的Kubernetes 1.28.2集群安装指南,帮助您从零开始构建稳定、高效的Kubernetes集群。我们将从环境准备、软件安装、集群初始化到节点添加等各个环节进行逐步讲解,确保您能够顺利完成集群的搭建。