gpt4 book ai didi

docker - Linkerd,K8和路由

转载 作者:行者123 更新时间:2023-12-02 20:49:43 25 4
gpt4 key购买 nike

我正在尝试让我了解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,这是使用 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容器部署复制 Controller :
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路径。)

关于docker - Linkerd,K8和路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42304918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com