ubernetes部署技術指南-ingress(十一)k_第1頁
ubernetes部署技術指南-ingress(十一)k_第2頁
ubernetes部署技術指南-ingress(十一)k_第3頁
ubernetes部署技術指南-ingress(十一)k_第4頁
ubernetes部署技術指南-ingress(十一)k_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

kubernetes部署-ingress(H—)

kubernetes部署一ingress

部署ingress

獲取ingress的yaml文件

https://github.ccm/kubernetes/ingress-nginx/tree/nginx-O.20.O/deploy

也可以wget直接下載下來

wgethttps://raw.githubusercontent.com/kubernetes/ingress-

nginx/master/deploy/niandatory.yaml

mandatory,yaml需要修改images的鏡像地址下面的我已經(jīng)都改好了可以直接

apiVersion:vl

kind:Namespace

metadata:

name:ingress-nginx

apiVersion:extensions/vlbetal

kind:Deployment

metadata:

name:default-http-backend

labels:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingrcss-nginx

namespace:ingress-nginx

spec:

replicas:1

selector:

matchLabels:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingress-nginx

template:

metadata:

labels:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingress-nginx

spec:

terminationGracePeriodSeconds:60

containers:

name:default-http-backend

#Anyimageispermissibleaslongas:

........1.I.serve..40.pag.a./

........2.T.serve.20.o../health.endpoint

image:goog1econtainer/defaultbackend-amd64:1.5

livenessProbe:

httpGct:

path:/healthz

port:8080

scheme:HTTP

initialDclaySeconds:30

timeoutSeconds:5

ports:

-containerPort:8080

resources:

limits:

cpu:10m

memory:20Mi

requests:

cpu:10m

memory:20Mi

apiVersion:vl

kind:Service

metadata:

name:default-http-backend

namespace:ingress-nginx

labels:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingress-nginx

spec:

ports:

-port:80

targetPort:8080

selector:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingress-nginx

kind:ConfigMap

apiVersion:vl

metadata:

name:nginx-configuration

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

kind:ConfigMap

apiVersion:vl

metadata:

name:tcp-services

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

kind:ConfigMap

apiVersion:vl

metadata:

name:udp-services

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

apiVersion:vl

kind:ServiceAccount

metadata:

name:nginx-ingress-serviceaccount

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

apiVersion:rbac.authorization,k8s.io/vlbetal

kind:ClusterRole

metadata:

name:nginx-ingress-clusterrole

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

rules:

-apiGroups:

nii

resources:

-configmaps

-endpoints

-nodes

-pods

-secrets

verbs:

-list

-watch

-apiGroups:

riii

resources:

-nodes

verbs:

-get

-apiGroups:

resources:

-services

verbs:

-get

-list

-watch

-apiGroups:

-"extensions

resources:

-ingresscs

verbs:

-get

-list

-watch

-apiGroups:

MIf

resources:

-events

verbs:

-create

-patch

-apiGroups:

"extensions,

resources:

-ingresses/status

verbs:

-update

apiVersion:rbac.authorization.k8s.io/vlbetal

kind:Role

metadata:

name:nginx-ingress-role

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

rules:

-apiGroups:

ntf

resources:

-configmaps

-pods

secrets

-namespaces

verbs:

-get

-apiGroups:

nii

resources:

-configmaps

resourceNames:

#Defaultsto"<election-icl>-<ingress-class>w

#Here:H<ingrcss-controller-lcader>-<nginx>n

#Thishastobeadaptedifyouchangeeitherparameter

#whenlaunchingthenginx-ingress-controller.

-ningress-controller-leader-nginxr,

verbs:

-get

-update

-apiGroups:

ntf

resources:

-configmaps

verbs:

create

-apiGroups:

nif

resources:

-endpoints

verbs:

一get

apiVersion:rbac.authorization.k8s.io/vlbetal

kind:RoleBinding

metadata:

name:nginx-ingress-role-nisa-binding

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

roleRef:

apiGroup:rbac.authorization,k8s.io

kind:Role

name:nginx-ingress-role

subjects:

-kind:ServiceAccount

name:nginx-ingress-serviceaccount

namespace:ingrcss-nginx

apiVersion:rbac.authorization.k8s.io/vlbetal

kind:ClustcrRolcBinding

metadata:

name:nginx-ingress-clusterrole-nisa-binding

labels:

app.kubcrnctes.io/name:ingrcss-nginx

app.kubernetes.io/part-of:ingress-nginx

roleRef:

apiGroup:rbac.authorization.k8s.io

kind:ClusterRole

name:nginx-ingress-clusterrole

subjects:

-kind:ServiceAccount

name:nginx-ingress-serviceaccount

namespace:ingress-nginx

apiVersion:extensions/vlbetal

kind:Deployment

metadata:

name:nginx-ingress-controller

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

spec:

replicas:2

selector:

matchLabels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

template:

metadata:

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

annotations:

prometheus.io/port:"10254”

prometheus.io/scrape:"true"

spec:

serviceAccountNamc:nginx-ingrcss-serviccaccount

containers:

-name:nginx-ingress-controller

image:siriuszg/nginx-ingress-controller:0.20.0

args:

-/nginx-ingress-controller

----default-backend-service=$(POD_NAMESPACE)/defau1t-

http-backend

----configmap=$(POD_NAMESPACE)/nginx-configuration

----tcp-services-configmap=S(POD_NAMESPACE)/tcp-services

----udp-services-configmap=$(POD_NAMESPACE)/udp-services

----pub:ish-service=$(PODNAMESPACE)/ingress-nginx

----annotations-prefix=nginx.ingress,kubernetes.io

securityContext:

capabilities:

drop:

-ALL

add:

-NET_BIND_SERVICE

#www-data->33

runAsUser:33

env:

-name:POD_NAME

valueFrom:

fieldRef:

fieldPath:metadata,name

-name:PODNAMESPACE

valueFrom:

fieldRef:

fieldPath:metadata,namespace

ports:

-name:http

containerPort:80

-name:https

containerPort:443

1ivenessProbe:

failureThreshold:3

httpGet:

path:/healthz

port:10254

scheme:HTTP

initialDelaySeconds:10

periodSeconds:10

successThreshold:1

timcoutScconds:1

readinessProbe:

failureThreshold:3

httpGet:

path:/hcalthz

port:10254

scheme:HTTP

periodSeconds:10

successThreshold:1

timeoutSeconds:1

查看pod是否已經(jīng)起來

kubectlgetpod-ningress-nginx

NAMEREADYSTATUSRESTARTSAGE

default-http-backend-cbd6d5994-hzJ911/1Running015h

這里其實是有問題的從yaml里可以看出會有兩個pod

gatdeploy查看一下

kubectlgetdeploy-ningress-nginx

NAMEREADYUP-TO-DATEAVAILABLEAGE

default-http-backend1/11115h

nginx-ingress-controller0/20015h

nginx-ingress-controller這個并沒有正確的交給pod來運行

/

通過以上流程圖可以看出deploy把任務交給rs,rs在分別啟動pod現(xiàn)在都看

不到pod問題應該在rs上

getrs

kubectlgetrs-ningress-nginx

NAMEDESIREDCURRENTREADYAGE

default-http-backend-cbd6d599411115h

nginx-ingress-control1er-57c8dd86d420015h

狀態(tài)不正確

通過describe查看一下詳情

kubectldescribers/nginx-ingress-controller_57c8dd86d4-ningress-

nginx

WarningFailedCreate49mreplicaset-controllerErrorcreating:pods

"nginx-ingress-controlIer-57c8dd86d4-97gl6risforbidden:Secur

ityContext.RunAsUserisforbidden

通過排查判斷是apiserver的參數(shù)問題

檢查apiserver配置文件:去除:-enable-adnission-plugins中的

SecurityContextDeny部分,分別重啟apiserver

/

get一下pod看起來了沒

kubectlgetpod-ningress-nginx-owide

NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESS

GATESdefault-http-backend-cbd6d5994-9bkh81/1Running099s

172.17.82.910.167.130.210

nginx-ingress-controller-57c8dd86d4-p8dz91/1Running097s

172.17.71.810.167.130.206

通過curl來測試是否正常

測試默認返回404頁面的主機hllp-backend

curlhttp://172.17.82.9

defaultbackend-404

測試直接訪問nginx代理看是否會轉(zhuǎn)發(fā)到404

curlhttp://172.17.71.8

defaultbackend-404

更改部署方式

此刻問題來了通過yaml創(chuàng)建的deploy以及server來看好像并沒有把nginx端

口映射到宿主機上,那么我訪問宿主機ip就不會有任何返回,這里可以通過

hostport+DaemonSet天解決這個問題

修改yaml文件

1.修改nginx部署方式為DaemonSet

2.注釋replicas:1

3.增加hostNetwork:true在spec:段內(nèi)增加

4.增加hostPort在Ports段內(nèi)增加

kubectldelete-fingress,yaml#刪除重新創(chuàng)建

kubectlapply-fingress,yaml

附上修改后的yaml文件內(nèi)容

apiVersion:vl

kind:Namespace

metadata:

name:ingress-nginx

apiVersion:extensions/vlbetal

kind:Deployment

metadata:

name:default-http-backend

labels:

app.kubcrnctcs.io/name:dcfault-http-backend

app.kubernetes.io/part-of:ingress-nginx

namespace:ingress-nginx

spec:

replicas:1

selector:

matchLabels:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingress-nginx

template:

metadata:

labels:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingress-nginx

spec:

terminationGracePeriodSeconds:60

containers:

-name:default-http-backend

#Anyimageispermissibleaslongas:

....1.I.serve..40.pag.a./

....2.I.serve.20.o../health,endpoint

image:googlecontainer/defau11backend-amd64:1.5

1ivenessProbe:

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

apiVersion:vl

kind:Service

metadata:

name:default-http-backend

namespace:ingress-nginx

labels:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingress-nginx

spec:

ports:

-port:80

targetPort:8080

selector:

app.kubernetes.io/name:default-http-backend

app.kubernetes.io/part-of:ingress-nginx

kind:ConfigMap

apiVersion:vl

metadata:

name:nginx-configuration

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

kind:ConfigMap

apiVersion:vl

metadata:

name:tcp-services

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

kind:ConfigMap

apiVersion:vl

metadata:

name:udp-services

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

apiVersion:vl

kind:ServiceAccount

metadata:

name:nginx-ingress-serviceaccount

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

apiVersion:rbac.authorization.k8s.io/vlbetal

kind:ClusterRole

metadata:

name:nginx-ingress-clusterrole

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

rules:

-apiGroups:

MIf

resources:

-configmaps

-endpoints

-nodes

-pods

-secrets

verbs:

-list

-watch

-apiGroups:

resources:

-nodes

verbs:

-get

-apiGroups:

resources:

-services

verbs:

-get

-list

-watch

-apiGroups:

-"extensions

resources:

-ingresses

verbs:

~get

-list

-watch

-apiGroups:

resources:

-events

verbs:

-create

-patch

-apiGroups:

-"extensions'

resources:

-ingresses/status

verbs:

-update

apiVersion:rbac.authorization.k8s.io/vlbetal

kind:Role

metadata:

name:nginx-ingress-role

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

rules:

-apiGroups:

nii

resources:

-configmaps

-pods

-secrets

-namespaces

verbs:

-get

-apiGroups:

MIf

resources:

-configmaps

resourceNames:

#Defaultsto"(election-id>Yingress-class>"

#Here:v<ingress-controller-leader>-<nginx>,'

#Thishastobeadaptedifyouchangeeitherparameter

#whenlaunchingthenginx-ingress-controller.

-"ingress-controller-leader-nginx”

verbs:

get

-update

-apiGroups:

nii

resources:

-configmaps

verbs:

-create

-apiGroups:

HII

resources:

-endpoints

verbs:

-get

apiVersion:rbac.authorization.k8s.io/vlbetal

kind:RoleBinding

metadata:

name:nginx-ingress-role-nisa-binding

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

roleRef:

apiGroup:rbac.authorization.k8s.io

kind:Role

name:nginx-ingress-role

subjects:

-kind:ServiceAccount

name:nginx-ingress-serviceaccount

namespace:ingress-nginx

apiVersion:rbac.authorization.k8s.io/vlbetal

kind:ClusterRoleBinding

metadata:

name:nginx-ingress-clusterrole-nisa-binding

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

roleRef:

apiGroup:rbac.authorization.k8s.io

kind:ClusterRole

name:nginx-ingress-clusterrole

subjects:

-kind:ServiceAccount

name:nginx-ingress-serviceaccount

namespace:ingress-nginx

apiVersion:extensions/vlbetal

kind:DaemonSet

metadata:

name:nginx-ingress-controller

namespace:ingress-nginx

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

spec:

#replicas:1

selector:

matchLabels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

template:

metadata:

labels:

app.kubernetes.io/name:ingress-nginx

app.kubernetes.io/part-of:ingress-nginx

annotations:

prometheus.io/port:"10254”

prometheus.io/scrape:"true"

spec:

serviceAccountName:nginx-ingress-serviceaccount

hostNetwork:true

containers:

-name:nginx-ingress-controller

image:siriuszg/nginx-ingress-controller:0.20.0

args:

-/nginx-ingress-controller

----default-backend-service=$(POD_NAMESPACE)/default-

http-backend

----configmap=$(PODNAMESPACE)/nginx-configuration

----tcp-services-configmap=S(POD_NAMESPACE)/tcp-services

----udp-services-configmap=S(POD_NAMESPACE)/udp-services

----pub1ish-service=$(PODNAMESPACE)/ingress-nginx

----annotations-prefix=nginx.ingress,kubernetes.io

securityContext:

capabilities:

drop:

-ALL

add:

-NET_BIND_SERV1CE

#www-data->33

runAsUser:33

env:

name:P0D_NAME

valueFrom:

fieldRef:

fieldPath:metadata,name

-name:POD_NAMESPACE

valueFrom:

fieldRef:

fieldPath:metadata,namespace

ports:

-name:http

containerPort:80

hostPort:80

-name:https

containerPort:443

hostPort:443

livenessProbe:

failureThreshold:3

httpGet:

path:/healthz

port:10254

scheme:HTTP

initialDelaySeconds:10

periodSeconds:10

success^hreshold:1

limeoutSeconds:1

readinessProbe:

failureThreshold:3

httpGet:

path:/healthz

port:10254

scheme:HTTP

periodSeconds:10

success^hreshold:1

timeoutSeconds:1

ingress部署參考文檔

kubernetesingressnginx

創(chuàng)建一個tomcat并用ingress7層代理

轉(zhuǎn)發(fā)

創(chuàng)建tomcat服務以及deploy

cattomcat-ingress,yaml

apiVersion:vl

kind:Service

meLadala:

name:tomcat

namespace:default

spec:

type:ClusterIP

selector:

app:tomcat

release:canary

ports:

-name:http

port:8080

targetPort:8080

apiVersion:apps/vl

kind:Deployment

metadata:

name:tomcat-deploy

spec:

replicas:1

selector:

matchLabels:

app:tomcat

release:canary

template:

metadata:

labels:

app:tomcat

release:canary

spec:

containers:

-name:tomcat

image:tomcat:7-alpine

ports:

-name:httpd

containerPort:8080

查看一下狀態(tài)

kubectlgetpodgreptomcat

tomcat-deploy-64b488b68-wk45q1/1Running029m

kubectlgetsvcgreptomcat

tomcatClusterIP10.0.0.1838080/TCP29m

創(chuàng)建ingress綁定

catingress-tomcat,yaml

apiVersion:extensions/vlbetal

kind:Ingress

metadata:

name:ingress-tomcat

namespace:default

annotations:

kubernets.io/ingress.class:”nginx"

spec:

rules:

-host:www.aa.con#用來解析的域名地址

http:

paths:

-path:

backend:

serviceNane:tomcat4集群服務的名字

servicePort:8080#集群服務開放的端口

訪問測試

curl-H"host:www.aa.com"http://10.167.130.206:80#IP地址為運行

ingress-nginx-controller的主機地址,因為只有運行了這個容器才會監(jiān)聽宿

主的80端口。

<!DOCTYPEhtml>

<htmllang=,,en',>

<head>

<title>ApacheTomcat/7.0.91</title>

可用命令查看ingress列表

kubectlgetingress

NAMEHOSTSADDRESSPORTSAGE

ingress-tomcatwww.aa.com8034m

kubectldescribeingressingress-tomcat

Name:ingress-tomcat

Namespace:default

Address:

Defaultbackend:default-http-backend:80:<none>)

Rules:

HostPathBackends

www.aa.com

tomcat:8080(<none>)

用ingress來負載代理tcp,udp請求

前面已經(jīng)展示了7層代理,那么4層代理比如mysql對3306端口代理怎么辦

呢?

ingress也可以做4層代理配置

具體配置如下

創(chuàng)建我們用來測試使用的mysql實例兩個

catmysql.yaml

apiVersion:vl

kind:Service

metadata:

name:mysql

namespace:default

spec:

type:ClusterIP

selector:

app:mysql

release:canary

ports:

-name:mysql

port:3306

targetPort:3306

apiVersion:apps/vl

kind:DaemonSet#每個node都運行一個pod,我就兩個node正好用來測試

負載效果

metadata:

name:mysql-daemonset

spec:

#replicas:1

selector:

matchLabels:

app:mysql

release:canary

template:

metadata:

labels:

app:mysql

release:canary

spec:

containers:

-name:mysql

image:mysql

env:

name:MYSQLROOT_PASSWORD#mysql鏡像必須的變量,不寫這個

變量mysql跑不起來

value:”nysql”

ports:

-name:mysql

containerPort:3306

kubectlapply-fmysql.yaml#部署mysqlpod

kubectlgetpod

mysql-daemonset

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論