k8s服務暴露、ingress-controller萝映、外部訪問

搭建好k8s環(huán)境之后吴叶,需要將內部的服務一個個都能夠在外網進行訪問,所以我們的設想是這樣的:


image.png

nginx擁有外部網絡的ip锌俱,而且能夠轉發(fā)請求到內部晤郑,接下來我們來實現

安裝各種ingress controller的各種組件

yaml文件在此:https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml,這個總是最新的版本贸宏,如果需要其他版本的造寝,可以參考:https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.20.0/deploy/mandatory.yaml,這里的0.20.0吭练,可以更改诫龙,比如改為0.21.0;

這些文件都都是開源維護在github上的鲫咽,可以上去看具體的實現和使用說明签赃,這里給個0.25.0的地址https://github.com/kubernetes/ingress-nginx/tree/nginx-0.25.0/deploy/static,上去后可以切換Tag分尸,branch來看其他的版本锦聊,如圖:

image.png

下載文件稍作修改

 wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

查找文件中用到的鏡像,有些鏡像需要翻墻才可以下箩绍,所以提前準備好鏡像孔庭,或者有自己的倉庫的,可以提前準備好


image.png

給一個我現在0.25.0版本鏡像地址:
registry.cn-hangzhou.aliyuncs.com/wuji_cyb/ingress-controller:0.25.0(注意下載完docker tag成需要的鏡像)

加上hostNetwork的選項,配置hostNetwork: true是一種直接定義Pod網絡的方式圆到。定義后怎抛,Ingress-controller的IP就與宿主機IP一樣:


image.png

部署、測試

 kubectl apply -f mandatory.yaml
image.png

測試curl通芽淡,也看到了ip是宿主機node的ip

部署一個應用來進行測試

查看mandatory.yaml马绝,里面有如下圖的args配置:


image.png

這里有tcp-services、udp-services挣菲、nginx-configuration富稻、這些都是configmap,我們可以通過創(chuàng)建這些configmap己单,來動態(tài)讓配置生效唉窃;如果有nginx-configuration這個configmap,會自動作為nginx的配置項生效纹笼;tcp-services和udp-services是用來將內部服務通過nginx暴露出去的,來試一試:

部署一個mysql苟跪,然后將mysql暴露出去:

mysql.yaml:

---
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-rc
  labels:
    name: mysql-rc
spec:
  replicas: 1
  selector:
    name: mysql-pod
  template:
    metadata:
      labels: 
        name: mysql-pod
    spec:
      containers:
      - name: mysql
        image: hub.c.163.com/library/mysql:5.7
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "mysql"
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  labels: 
    name: mysql-svc
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    name: mysql-pod
---

編輯configmap廷痘, tcp-services,如下:

kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-services
  namespace: kube-system
data:
  13306: "default/mysql-svc:3306"

13306: "default/mysql:3306"的含義是將命名空間default的下mysql-svc的3306端口負載到nginx-controller的13306端口件已;話說這是L4層負載笋额,本人不是很懂這些;然后我們就可以通過nginx controller 這個pod的ip加上13306端口就可以訪問mysql了篷扩,上面我們看到pod的ip是node宿主機的ip10.57.31.23兄猩,所以10.57.31.23:13306就是mysql的訪問地址;
image.png

同理鉴未,UDP暴露用配置udp-services的configmap即可枢冤,不舉例了

編寫ingress規(guī)則來暴露

這才是我們平時使用最多的,通過定義ingress來暴露服務铜秆,也就是L7淹真,部署個tomcat

---
apiVersion: v1
kind: ReplicationController
metadata:
  name: tomcat-rc
  labels:
    name: tomcat-rc
spec:
  replicas: 1
  selector:
    name: tomcat-pod
  template:
    metadata:
      labels: 
        name: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: hub.c.163.com/library/tomcat:8.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
  labels: 
    name: tomcat-svc
spec:
  ports:
  - port: 8080
    targetPort: 8080
  selector:
    name: tomcat-pod
---

編寫Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: ingress-tomcat-mysql
spec:
  rules:
  - host: k9s.cyb.com
    http:
      paths:
      - path: /tomcat(/|$)(.*)
        backend:
          serviceName: tomcat-svc
          servicePort: 8080

配置k9s.cyb.com到本地/etc/hosts,然后瀏覽器訪問k8s.cyb.com就可以訪問到tomcat了连茧; nginx.ingress.kubernetes.io/rewrite-target這個配置為了轉發(fā)的時候將/tomcat這個相對路徑換成/核蘸,而且保留后面的露囧;具體使用參照https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/rewrite/README.md,這樣的最終結果就是對外提供一個域名啸驯,加上各種路徑就可以提供不同的服務了客扎;

替換效果示例:
rewrite.bar.com/something rewrites to rewrite.bar.com/
rewrite.bar.com/something/ rewrites to rewrite.bar.com/
rewrite.bar.com/something/new rewrites to rewrite.bar.com/new

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市罚斗,隨后出現的幾起案子徙鱼,更是在濱河造成了極大的恐慌,老刑警劉巖惰聂,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疆偿,死亡現場離奇詭異咱筛,居然都是意外死亡,警方通過查閱死者的電腦和手機杆故,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門迅箩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人处铛,你說我怎么就攤上這事饲趋。” “怎么了撤蟆?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵奕塑,是天一觀的道長。 經常有香客問我家肯,道長龄砰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任讨衣,我火速辦了婚禮换棚,結果婚禮上,老公的妹妹穿的比我還像新娘反镇。我一直安慰自己固蚤,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布歹茶。 她就那樣靜靜地躺著夕玩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惊豺。 梳的紋絲不亂的頭發(fā)上燎孟,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音扮叨,去河邊找鬼缤弦。 笑死,一個胖子當著我的面吹牛彻磁,可吹牛的內容都是我干的碍沐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼衷蜓,長吁一口氣:“原來是場噩夢啊……” “哼累提!你這毒婦竟也來了?” 一聲冷哼從身側響起磁浇,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤斋陪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體无虚,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡缔赠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了友题。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗤堰。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖度宦,靈堂內的尸體忽然破棺而出踢匣,到底是詐尸還是另有隱情,我是刑警寧澤戈抄,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布离唬,位于F島的核電站,受9級特大地震影響划鸽,放射性物質發(fā)生泄漏输莺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一漾稀、第九天 我趴在偏房一處隱蔽的房頂上張望模闲。 院中可真熱鬧,春花似錦崭捍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至橄浓,卻和暖如春粒梦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荸实。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工匀们, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人准给。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓泄朴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親露氮。 傳聞我的和親對象是個殘疾皇子祖灰,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345