[英]Linkerd, k8s and routing
我正在嘗試讓我了解k8s和linkerd。 我之前使用過docker-compose,之前使用過consul。
我還沒有完全弄清楚自己在做什么錯,所以如果有人可以檢查邏輯並查看錯誤出在哪里,我會很高興。
我在本地使用minikube
,並希望使用GCE進行部署。
我基本上是想得到一個簡單的容器,該容器運行在k8s和鏈接器中運行的節點應用程序,但是對於某些原因,我無法使路由正常工作。
config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: l5d-config
data:
config.yaml: |-
admin:
port: 9990
namers:
- kind: io.l5d.k8s
experimental: true
host: localhost
port: 8001
routers:
- protocol: http
label: outgoing
baseDtab: |
/srv => /#/io.l5d.k8s/default/http;
/host => /srv;
/http/*/* => /host;
/host/world => /srv/world-v1;
interpreter:
kind: default
transformers:
- kind: io.l5d.k8s.daemonset
namespace: default
port: incoming
service: l5d
servers:
- port: 4140
ip: 0.0.0.0
- protocol: http
label: incoming
baseDtab: |
/srv => /#/io.l5d.k8s/default/http;
/host => /srv;
/http/*/* => /host;
/host/world => /srv/world-v1;
interpreter:
kind: default
transformers:
- kind: io.l5d.k8s.localnode
servers:
- port: 4141
ip: 0.0.0.0
然后我部署了一個deamonset
了解的deamonset
,這是使用linkerd
的最明智的方法
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
labels:
app: l5d
name: l5d
spec:
template:
metadata:
labels:
app: l5d
spec:
volumes:
- name: l5d-config
configMap:
name: "l5d-config"
containers:
- name: l5d
image: buoyantio/linkerd:0.8.6
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
args:
- /io.buoyant/linkerd/config/config.yaml
ports:
- name: outgoing
containerPort: 4140
hostPort: 4140
- name: incoming
containerPort: 4141
- name: admin
containerPort: 9990
volumeMounts:
- name: "l5d-config"
mountPath: "/io.buoyant/linkerd/config"
readOnly: true
- name: kubectl
image: buoyantio/kubectl:v1.4.0
args:
- "proxy"
- "-p"
- "8001"
然后,我使用構建的docker容器部署復制控制器:
apiVersion: v1
kind: ReplicationController
metadata:
name: testservice
spec:
replicas: 3
selector:
app: hello
template:
metadata:
labels:
app: hello
spec:
dnsPolicy: ClusterFirst
containers:
- name: service
image: eu.gcr.io/xxxx/testservice:1.0
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: http_proxy
value: $(NODE_NAME):4140
command:
- "pm2-docker"
- "processes.json"
ports:
- name: service
containerPort: 8080
然后,當我進入minikube service l5d
將顯示服務和鏈接器,但沒有得到應顯示的默認頁面。
為了測試一切是否正常,我構建了另一個服務,該服務直接指向端口8080,然后它可以工作,但不能通過鏈接器代理。
有人可以發現錯誤嗎? 非常感謝。
我們在鏈接器Slack中對此進行了詳細討論。 問題不在於配置本身,而在於沒有在請求上設置主機頭的事實。
上面的配置將基於主機頭進行路由,因此此頭必須與服務名稱相對應。 curl -H "Host: world" http://$IPADDRESS
(或其他任何方式)會起作用。
(也可以根據請求的其他位進行路由,例如HTTP請求的URL路徑。)
多虧了linkerd松弛通道以及進一步的嘗試,我設法弄清了這一點,並構建了兩個相互通信的服務,即發布和獲取數據。 這只是為了擺脫linkerd的困擾。 有空的時候,我會寫一篇有關它的教程,以便其他人可以從中學習。
我在復制控制器中缺少一個kubectl代理:
- name: kubectl
image: buoyantio/kubectl:1.2.3
args:
- proxy
- "-p"
- "8001"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.