TheRiver | blog

You have reached the world's edge, none but devils play past here

0%

install linkerd on k8s with nginx ingress control

linkerd安装后监听的本地端口,从外部访问需要特别配置。这篇文章环境基于gce下kubeadm部署的k8s,不同环境可能情况不同。

步骤

按照官方的步骤就行了,装完linkerd和linkerd viz,最后

1
linkerd viz dashboard &

就自动监听127.0.0.1了,本地部署的话到这里就可以结束了。我用的gce通过kubeadm部署的,公有云环境稍微复杂点,最后我用的方案是ingress-nginx-control来实现,中间挺折腾的,记录下。

官方提供了几种expose access的方式,我用的nginx,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: web-ingress-auth
namespace: linkerd-viz
data:
auth: YWRtaW46JGFwcjEkbjdDdTZnSGwkRTQ3b2dmN0NPOE5SWWpFakJPa1dNLgoK
---
# apiVersion: networking.k8s.io/v1beta1 # for k8s < v1.19
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
namespace: linkerd-viz
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: $service_name.$namespace.svc.cluster.local:8084
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header Origin "";
proxy_hide_header l5d-remote-ip;
proxy_hide_header l5d-server-id;
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: web-ingress-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
spec:
ingressClassName: nginx
rules:
- host: dashboard.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8084

这里声明了一个ingress和一个secret,我不打算加https,所以不搞证书了,按照示例的账号密码就可以了。然后需要自己部署ingress-nginx-control,来根据上面的ingress生成具体的服务.
这里也按照官方文档安装就行了。

上面官方yam里面已经提供了service,默认是loadbalancer,在公有云上面比较麻烦,kubectl get service -n **后没有看到exterlnal ip,参考网上的方法,手动加:

1
2
3
4
5
...
spec:
type: LoadBalancer
externalIPs:
- 192.168.0.10

之后能看到ip了,我在node/master节点都可以访问,但通过本地或者其他地址访问还是不行,具体原因未知。后面为了节约时间手动改成nodeport了,改后也不能直接访问,还需要一步特别配置,在service的yml里面改一下:

1
2
3
4
5
6
7
// before
spec:
externalTrafficPolicy: Local

// after
spec:
externalTrafficPolicy: Cluster

再之后就ok了,可以通过域名用http访问了,账号密码官网有,这里改密码目前还没看怎么处理,毕竟是个测试环境,不打算长期用,就不折腾了,后面inject app后看看其他功能。

reference

linkerd.io

ingress-nginx

gke上安装步骤

Cloud Native - Service mesh install and setup

How To Install and Use Linkerd with Kubernetes

----------- ending -----------